0
votes

The program crashes at

var subdomain = new Dictionary

The message that Visual Studio says is "Argument exception was unhandled"

I'm not sure how to fix it or what it means? Any help would be appreciated.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Win32;

namespace LotusTrustedSites
{       
    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;        
        }    
    }
}
1

1 Answers

1
votes

You have duplicate keys. Dictionary requires keys to be unique.