2009-06-09 16 views
10

पर विश्वसनीय साइटें जोड़ें I WATN का उपयोग कर आईई ऑटोमेशन प्रोजेक्ट कर रहा हूं।प्रोग्रामेटिक रूप से इंटरनेट एक्सप्लोरर

जब डाउनलोड किया जा करने के लिए फ़ाइल क्लिक किया जाता है, मैं इंटरनेट एक्सप्लोरर सूचना बार में निम्न मिलती है:

आपकी सुरक्षा के लिए करने के लिए, इंटरनेट एक्सप्लोरर इस साइट पर आप लिए फ़ाइलें डाउनलोड करने से अवरुद्ध कर दिया है कंप्यूटर।

रिपोर्ट डाउनलोड करने के क्रम में, मैं मैन्युअल रूप से विश्वसनीय साइटों की इंटरनेट एक्सप्लोरर के सूची से साइट में जोड़ सकते हैं, लेकिन मैं अगर साइट पर भरोसा किया है .NET में प्रोग्राम के रूप में जांच करने के लिए पसंद करते हैं और सूची में जोड़ने के आरंभ करेगा अगर यह नही तो।

एफवाईआई, मैं वर्तमान में आई 7 का उपयोग कर रहा हूं।

+0

मुझे नहीं लगता कि आप कर सकते हैं ... लेकिन अगर आप मुझे यह देखना पसंद करेंगे कि कैसे! – marcgg

+0

मुझे नहीं लगता कि आप या तो सुरक्षा कारणों से कर सकते हैं। ऐसा कहकर, उन्हें * कहीं * संग्रहीत किया जाना चाहिए। रजिस्ट्री में माइक्रोसॉफ्ट को जानना ... – Powerlord

+4

@ आर। Bemrose, इस के लिए अनुमति देने के लिए कोई सुरक्षा कारण नहीं है। यदि किसी दुर्भावनापूर्ण प्रोग्राम में HKCU तक पहुंच पहुंच है, तो यह शायद ही कभी सबसे खराब हो सकता है। यदि कोई * वेबसाइट * विश्वसनीय साइटों पर खुद को जोड़ सकती है, तो अब यह बुरा होगा। –

उत्तर

12

this

मूल रूप से यह लग रहा है पर एक नज़र डालें, जैसे कि

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains\DOMAINNAME 

में रजिस्ट्री कुंजी बनाएं है तुम सब करने की है तो "http" मूल्य == साथ नाम के एक REG_DWORD मान 2

+3

मैं निजी enum TrustedZoneType उपयोग करने का सुझाव होगा, जो { इंट्रानेट = 1, TrustedSites = 2, इंटरनेट = 3, RestrictedSites = 4 } WatiN.Core की इस कार्यक्षमता हिस्सा बनाने के लिए – itsho

9

यहां कार्यान्वयन है जिसे मैं .NET में रजिस्ट्री कुंजियों को लिखने के लिए आया था।

मुझे सही दिशा में स्थापित करने के लिए धन्यवाद, बेन।

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<string, string> 
           { 
            {"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<string, string> 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

मैं Watin करने के लिए एक आरएफसी और प्रारंभिक पैच प्रस्तुत –

+0

मीठा। क्या कोई ऐसी जगह है जो समुदाय को वाटीएन के लिए पैच जमा कर सकती है? –

+0

मैंने बस एक कार्यात्मक के साथ [email protected] पर पोस्ट किया है, लेकिन आपके द्वारा यहां पोस्ट किए गए कोड के आधार पर अधिकतर गुणवत्ता वाले पैच को रिलीज़ नहीं किया गया है और अब इसमें शामिल होने पर कोई दिलचस्पी है या नहीं। अगर यह अंदर आता है तो मैं यहां वापस पोस्ट करूंगा। Http://sourceforge.net/mailarchive/forum.php?thread_name=4A2FD162.1020103%40gmx.net&forum_name=watin-development –

5

खुशी है कि मैं आपकी पोस्टिंग में आया हूं। उत्कृष्ट योगदान में जो कुछ भी मैं जोड़ सकता हूं वह यह है कि जब भी यूआरआई में आईपी पता होता है तो एक अलग रजिस्ट्री कुंजी का उपयोग किया जाता है यानी पता पूरी तरह से योग्य डोमेन नाम नहीं है।

इस उदाहरण आप एक वैकल्पिक दृष्टिकोण का उपयोग करने के लिए:

कल्पना कीजिए मैं विश्वसनीय साइटों के लिए एक आईपी पता जोड़ना चाहते हैं: 10.0.1.13 कहना और मुझे परवाह नहीं है क्या प्रोटोकॉल।

HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet सेटिंग्स \ ZoneMap \ Ranges के तहत, मैं एक कुंजी बना देता हूं उदा। "रेंज 1" और अंदरूनी मान जो निम्न मान बनाते हैं:

नाम "*" और मान 0x2 के साथ एक DWORD (सभी प्रोटोकॉल (*) और विश्वसनीय साइट (2) के लिए) नाम के साथ एक स्ट्रिंग "रेंज" मूल्य "10.0.1.13"

+0

मैंने आईपी पते के साथ सफलतापूर्वक डोमेन कुंजी दृष्टिकोण का उपयोग किया है। मैंने शुरुआत में रेंज कुंजी दृष्टिकोण की कोशिश की और यह काम नहीं किया। प्रोटोकॉल के बारे में विशिष्ट होने के नाते भी महत्वपूर्ण लगता है। –

-1

एक वेबसाइट विश्वसनीय साइटों के लिए खुद को जोड़ सकता है, तो अब है कि बुरा होगा।

मैं नहीं काफी agree- जब तक ब्राउज़र अनुमति के लिए उपयोगकर्ता, विश्वसनीय साइटों के लिए खुद को जोड़ने के लिए बहुत उपयोगकर्ता अनुभव है, जहां उपयोगकर्ता डोमेन पर भरोसा करता है सरल बना सकते हैं एक साइट की क्षमता पूछता है और सही पेज प्रदर्शन चाहता है।

विकल्प यह है कि उपयोगकर्ता को मैन्युअल रूप से डोमेन जोड़ने के लिए इंटरनेट विकल्प में जाना होगा, जो मेरे उपयोगकर्ताओं के लिए व्यवहार्य नहीं है।

मैं एक php या साइट पर ही जोड़ने के लिए, या तो कुछ आईई एपीआई के माध्यम से, या रजिस्ट्री के माध्यम से के रूप में आप तो काम आते हुए कि ऊपर बताया गया है जावास्क्रिप्ट विधि के लिए देख रहा हूँ! ,

  • php via shell
  • दूसरों मैं यहाँ सूचीबद्ध करने के लिए क्योंकि मैं पर्याप्त अंक
2

adding the domain to the Trusted Sites list के अलावा जरूरत नहीं है की अनुमति नहीं कर रहा हूँ:

अब तक इन संभव समाधान मिल गया है आपको विश्वसनीय साइट्स ज़ोन के लिए "फ़ाइल डाउनलोड के लिए स्वचालित रूप से संकेत" सेटिंग को बदलने की भी आवश्यकता हो सकती है।

HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ इंटरनेट सेटिंग्स \ क्षेत्र \ 2 @ 2200

बदलें से मूल्य: प्रोग्रामैटिक रूप से ऐसा करने के लिए, आप कुंजी/मान को संशोधित (अक्षम) (सक्षम करें)। - यहाँ तक कि चेहरे का भाव के कोड के आधार पर

public void DisableForTrustedSitesZone() 
{ 
    const string ZonesLocation = @"Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones"; 
    const int TrustedSiteZone = 2; 

    const string AutoPromptForFileDownloadsValueName = @"2200"; 
    const int AutoPromptForFileDownloadsValueEnable = 0x00;  // Bypass security bar prompt 

    using (RegistryKey currentUserKey = Registry.CurrentUser) 
    { 
     RegistryKey trustedSiteZoneKey = currentUserKey.OpenSubKey(string.Format(@"{0}\{1:d}", ZonesLocation, TrustedSiteZone), true); 
     trustedSiteZoneKey.SetValue(AutoPromptForFileDownloadsValueName, AutoPromptForFileDownloadsValueEnable, RegistryValueKind.DWord); 
    } 
} 
2

यहाँ आईई करने के लिए प्रोग्राम के रूप में विश्वसनीय साइटों को जोड़ने के कार्यान्वयन है: यहाँ है कि क्या करने के लिए कुछ सी # कोड है। यह डोमेन नाम और आईपी पते का भी समर्थन करता है। सीमा कोई विशिष्ट प्रोटोकॉल परिभाषित नहीं किया जा सकता है, इसके बजाय यह सभी प्रोटोकॉल के लिए बस "*" का उपयोग करता है।

// Source : http://support.microsoft.com/kb/182569 
static class IeTrustedSite 
{ 
    const string DOMAINS_KEY = @"Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains"; 
    const string RANGES_KEY = @"Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Ranges"; 

    const int TRUSTED_SITE_CODE = 0x2; 
    const string ALL_PROTOCOL = "*"; 
    const string RANGE_ADDRESS = ":Range"; 

    public static void AddSite(string address) 
    { 
     string[] segmentList = address.Split(new string[] {"."}, StringSplitOptions.None); 
     if (segmentList.Length == 4) 
      AddIpAddress(segmentList); 
     else 
      AddDomainName(segmentList); 
    } 

    static void AddIpAddress(string[] segmentList) 
    { 
     string ipAddress = segmentList[0] + "." + segmentList[1] + "." + segmentList[2] + "." + segmentList[3]; 
     RegistryKey rangeKey = GetRangeKey(ipAddress); 

     rangeKey.SetValue(ALL_PROTOCOL, TRUSTED_SITE_CODE, RegistryValueKind.DWord); 
     rangeKey.SetValue(RANGE_ADDRESS, ipAddress, RegistryValueKind.String); 
    } 

    static RegistryKey GetRangeKey(string ipAddress) 
    { 
     RegistryKey currentUserKey = Registry.CurrentUser; 
     for (int i = 1; i < int.MaxValue; i++) 
     { 
      RegistryKey rangeKey = currentUserKey.GetOrCreateSubKey(RANGES_KEY, "Range" + i.ToString()); 

      object addressValue = rangeKey.GetValue(RANGE_ADDRESS); 
      if (addressValue == null) 
      { 
       return rangeKey; 
      } 
      else 
      { 
       if (Convert.ToString(addressValue) == ipAddress) 
        return rangeKey; 
      } 
     } 
     throw new Exception("No range slot can be used."); 
    } 

    static void AddDomainName(string[] segmentList) 
    { 
     if (segmentList.Length == 2) 
     { 
      AddTwoSegmentDomainName(segmentList); 
     } 
     else if (segmentList.Length == 3) 
     { 
      AddThreeSegmentDomainName(segmentList); 
     } 
     else 
     { 
      throw new Exception("Un-supported server address."); 
     } 
    } 

    static void AddTwoSegmentDomainName(string[] segmentList) 
    { 
     RegistryKey currentUserKey = Registry.CurrentUser; 

     string domain = segmentList[0] + "." + segmentList[1]; 
     RegistryKey trustedSiteKey = currentUserKey.GetOrCreateSubKey(DOMAINS_KEY, domain); 

     SetDomainNameValue(trustedSiteKey); 
    } 

    static void AddThreeSegmentDomainName(string[] segmentList) 
    { 
     RegistryKey currentUserKey = Registry.CurrentUser; 

     string domain = segmentList[1] + "." + segmentList[2]; 
     currentUserKey.GetOrCreateSubKey(DOMAINS_KEY, domain); 

     string serviceName = segmentList[0]; 
     RegistryKey trustedSiteKey = currentUserKey.GetOrCreateSubKey(DOMAINS_KEY + @"\" + domain, serviceName); 

     SetDomainNameValue(trustedSiteKey); 
    } 

    static void SetDomainNameValue(RegistryKey subDomainRegistryKey) 
    { 
     object securityValue = subDomainRegistryKey.GetValue(ALL_PROTOCOL); 
     if (securityValue == null || Convert.ToInt32(securityValue) != TRUSTED_SITE_CODE) 
     { 
      subDomainRegistryKey.SetValue(ALL_PROTOCOL, TRUSTED_SITE_CODE, RegistryValueKind.DWord); 
     } 
    } 
} 

static class RegistryKeyExtension 
{ 
    public static RegistryKey GetOrCreateSubKey(this RegistryKey registryKey, string parentString, string subString) 
    { 
     RegistryKey subKey = registryKey.OpenSubKey(parentString + @"\" + subString, true); 
     if (subKey == null) 
      subKey = registryKey.CreateSubKey(parentString, subString); 

     return subKey; 
    } 

    public static RegistryKey CreateSubKey(this RegistryKey registryKey, string parentString, string subString) 
    { 
     RegistryKey parentKey = registryKey.OpenSubKey(parentString, true); 
     if (parentKey == null) 
      throw new Exception("BUG : parent key " + parentString + " is not exist."); 

     return parentKey.CreateSubKey(subString); 
    } 
} 
1

शक्तियों का उपयोग करना यह काफी आसान है।

#Setting IExplorer settings 
Write-Verbose "Now configuring IE" 
#Add http://website.com as a trusted Site/Domain 
#Navigate to the domains folder in the registry 
set-location "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" 
set-location ZoneMap\Domains 

#Create a new folder with the website name 
new-item website/ -Force 
set-location website/ 
new-itemproperty . -Name * -Value 2 -Type DWORD -Force 
new-itemproperty . -Name http -Value 2 -Type DWORD -Force 
new-itemproperty . -Name https -Value 2 -Type DWORD -Force 
संबंधित मुद्दे