Change Internet Explorer settings programmatically?

19,885

Solution 1

The "cheat" way to do this is to change the value

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\0\1609 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\1\1609 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\2\1609 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3\1609 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\4\1609

Where 0-4 are Zone identifiers and the value is 0 to Allow, 1 to Prompt, and 3 to Block. Keep in mind that if your code does this on anyone's machine but your own, you're likely to find your code blocked as malware.

The "proper" way to do this is to use the APIs to create an IInternetZoneManager and call SetZoneActionPolicy to adjust the settings for URLACTION_HTML_MIXED_CONTENT in the zones you want to adjust.

Solution 2

You aren't supposed to do this "programmatically". That's why there isn't an API for it. Only the user can change their security settings, and they do it using the built-in interface that you've already discovered.

The poor IE team has been working overtime trying to tighten up the security of their browser. They're not going to throw in something like this that would nullify all of their efforts in a matter of seconds.
Recall that even once this option is selected, there's a confirmation dialog presented. How do you propose to "click" that programmatically? (Hmm, on second thought, don't tell me. That's probably the next question you'll be asking.)

Give up on trying to do this programmatically, and ask the user to do it themselves. Provide a complete help file or other documentation that explains why you're requesting that they make this change, what features will be unavailable if they do not choose to make this change, and what the possible security risks of making such a change are. And, of course, specific instructions on how the change is made.

Or, better yet, redesign your app so that it doesn't require a system-wide modification of IE's security settings. It's hard to imagine a legitimate case for this. A better solution might be asking the user to add your site to their "trusted sites". Remember that local pages have different security settings than remote pages by default.

Share:
19,885
kakopappa
Author by

kakopappa

Updated on June 22, 2022

Comments

  • kakopappa
    kakopappa almost 2 years

    Any idea how do I do the following using C#?

    1. Going to Tools -> Internet Options -> Security
    2. Select the Security tab
    3. Click the Custom Level button
    4. In the Miscellaneous section change Display mixed content to Enable
    • Pekka
      Pekka about 13 years
      You mean, from within a trusted, locally installed C# app that has administrator rights?
    • kakopappa
      kakopappa about 13 years
      Yes. trusted local app running with admin privileges
    • corlettk
      corlettk about 13 years
      And, of course, this would be a "temporary change"... which is ALLWAYS undone after it's served it's purpose? I wouldn't go "adjusting" the users browser settings, especially security sensitive ones, without the users INFORMED consent.
    • Frank Schwieterman
      Frank Schwieterman almost 13 years
      Lots of lecturing as responses. This might be non-published code used for testing purposes. There are legitimate reasons to want to do such things.
  • Ankur
    Ankur about 13 years
    The settings are under sub keys at - HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings;
  • Cody Gray
    Cody Gray about 13 years
    Remember that modifications to the Registry do not take effect immediately. The settings in the Registry are generally read once at system startup and cached. This is not the correct way to change system settings.
  • Ankur
    Ankur about 13 years
    It depends on the application and the keys. Some reg keys which are used by OS will require you to start the OS again as OS has read them once and cached their values. Reg keys which are used by some application will only require to restart the application. Registry is just a general storage area, how the data is used depends on the consumer of the data (OS, apps etc). But obviously it is not a good way of changing some other app setting by directly modifying its reg keys.
  • Cody Gray
    Cody Gray about 13 years
    Gee, yeah, it obviously depends on the app. But we're not talking about application configuration settings. We're talking about Internet Explorer's system-wide security settings. The point is, this is not the correct way to modify those settings. You found an undocumented hack, hurray. The problem with this are those typical of undocumented hacks. Searching the registry for the settings you want is not the right way of finding new functionality in Windows. Read Raymond Chen's blog for details.
  • Ankur
    Ankur about 13 years
    I agree with you. Don't do this.. but is good to know all this stuff. I would never do this in my app. using undocumented way of doing this is bad and will only lead to issues
  • fbonetti
    fbonetti almost 11 years
    A list of all the registry values and a description for each can be found here. Also note that each zone represents a distinct security zone. Zone 3 is the Internet Zone.
  • 9mjb
    9mjb over 5 years
    Goofy. As someone that just spent an hour going cross eyed and hoping I got all those settings the way <big-company> wants them... I'd say.. even after all these years (it's 2018 now) <big-company> security doesn't seem to have a way to MONITOR / MANAGE these settings. It's a crime. I should be able to run the config-ie.exe and both myself and <big-company> rest assured the settings are what they should be.