Programmatically add trusted sites to Internet Explorer

后端 未结 7 1940
星月不相逢
星月不相逢 2020-11-29 06:42

I\'m doing an IE automation project using WatiN.

When a file to be downloaded is clicked, I get the following in the Internet Explorer Information bar:

7条回答
  •  清酒与你
    2020-11-29 07:23

    Here's the implementation that I came up with for writing the registry keys in .NET.

    Thanks for setting me in the right direction, Ben.

    using System;
    using System.Collections.Generic;
    using Microsoft.Win32;
    
    
    namespace ReportManagement
    {
        class ReportDownloader
        {
            [STAThread]
            static void Main(string[] args)
            {
    
                const string domainsKeyLocation = @"Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains";
                const string domain = @"newsite.com";
                const int trustedSiteZone = 0x2;
    
                var subdomains = new Dictionary
                                     {
                                         {"www", "https"},
                                         {"www", "http"},
                                         {"blog", "https"},
                                         {"blog", "http"}
                                     };
    
                RegistryKey currentUserKey = Registry.CurrentUser;
    
                currentUserKey.GetOrCreateSubKey(domainsKeyLocation, domain, false);
    
                foreach (var subdomain in subdomains)
                {
                    CreateSubdomainKeyAndValue(currentUserKey, domainsKeyLocation, domain, subdomain, trustedSiteZone);
                }
    
                //automation code
            }
    
            private static void CreateSubdomainKeyAndValue(RegistryKey currentUserKey, string domainsKeyLocation, 
                string domain, KeyValuePair subdomain, int zone)
            {
                RegistryKey subdomainRegistryKey = currentUserKey.GetOrCreateSubKey(
                    string.Format(@"{0}\{1}", domainsKeyLocation, domain), 
                    subdomain.Key, true);
    
                object objSubDomainValue = subdomainRegistryKey.GetValue(subdomain.Value);
    
                if (objSubDomainValue == null || Convert.ToInt32(objSubDomainValue) != zone)
                {
                    subdomainRegistryKey.SetValue(subdomain.Value, zone, RegistryValueKind.DWord);
                }
            }
        }
    
        public static class RegistryKeyExtensionMethods
        {
            public static RegistryKey GetOrCreateSubKey(this RegistryKey registryKey, string parentKeyLocation, 
                string key, bool writable)
            {
                string keyLocation = string.Format(@"{0}\{1}", parentKeyLocation, key);
    
                RegistryKey foundRegistryKey = registryKey.OpenSubKey(keyLocation, writable);
    
                return foundRegistryKey ?? registryKey.CreateSubKey(parentKeyLocation, key);
            }
    
            public static RegistryKey CreateSubKey(this RegistryKey registryKey, string parentKeyLocation, string key)
            {
                RegistryKey parentKey = registryKey.OpenSubKey(parentKeyLocation, true); //must be writable == true
                if (parentKey == null) { throw new NullReferenceException(string.Format("Missing parent key: {0}", parentKeyLocation)); }
    
                RegistryKey createdKey = parentKey.CreateSubKey(key);
                if (createdKey == null) { throw new Exception(string.Format("Key not created: {0}", key)); }
    
                return createdKey;
            }
        }
    }
    

提交回复
热议问题