2009-05-21 9 views
7

Utworzono składnik COM w języku C#, który zarejestrowałem za pomocą Regasm. Mogę teraz użyć tego w IE przy użyciu ActiveXObject (...). Jednak to działa tylko kiedy mogę zmienić ustawienia zabezpieczeń IE i pozwalają na uruchomienie niepodpisanych formantów ActiveX, w tym przypadku pojawia się komunikat:Kontrolka activex na tej stronie może być niebezpieczna.

kontrola

ActiveX na tej stronie mogą być niebezpieczne interakcje z innymi częściami strony . Czy chcesz zezwolić na tę interakcję?

Zawsze chcę, aby IE zezwoliło na tę interakcję bez podpowiedzi. Czy ktoś wie, jak można to zrobić?

Dzięki

Odpowiedz

5

Twój formant ActiveX musi implementować interfejs IObjectSafety, aby program IE przestał wyświetlać "niebezpieczny?" skłonić. Zrobiłem to kilka lat temu dla kontrolki ActiveX VB6. W 5. kroku This page pokazano, jak to zrobić w .Net.

+0

To zadziałało! Dzięki pęczku David. – vikasde

+0

Czy zostanie to zastosowane do formularza internetowego lub formularza wygranej? Czy IObjectSafety można wdrożyć bez strony ActiveX? – clerktech

+0

Zakładam "nie". Widziałem to tylko z kontrolkami ActiveX. – David

0

myślę, że można po prostu ustawić tereny zaufać poziom do pełna.

Narzędzia-> Opcje internetowe-> zamknięcie bezpieczeństwa> Zaufane Sites-> Przycisk

+1

już dodał witrynę do mojej zaufanej listy. Nadal dostaję podpowiedź. – vikasde

0

chodzi o podpisanie ActiveX zobaczyć this article witryn. Jednak nadal będziesz musiał zezwolić na ActiveX (pokaże ci tylko autora). Zobacz odpowiedź Ryana, jak zezwolić na ActiveX dla tej strony.

+0

Nie mam nic przeciwko zezwoleniu na kontrolę ActiveX, jednak jeśli otrzymam monit, stanie się to irytujące. Kontrola będzie używana tylko w naszym intranecie. Zobaczę, czy podpisywanie pomaga. – vikasde

3

już w obliczu tego problem.After długi spacer Mam rozwiązać ten problem.In klasa Twój ActiveX po prostu odziedziczyć IObjectSafety class.See obraz poniżej: enter image description here

IObjectSafety Klasa podane poniżej:

[ComImport, GuidAttribute("CB5BDC81-93C1-11CF-8F20-00805F2CD064")] 
[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)] 
public interface IObjectSafety 
{ 
    [PreserveSig] 
    int GetInterfaceSafetyOptions(ref Guid riid,[MarshalAs(UnmanagedType.U4)] ref int pdwSupportedOptions,[MarshalAs(UnmanagedType.U4)] ref int pdwEnabledOptions); 

    [PreserveSig()] 
    int SetInterfaceSafetyOptions(ref Guid riid,[MarshalAs(UnmanagedType.U4)] int dwOptionSetMask,[MarshalAs(UnmanagedType.U4)] int dwEnabledOptions); 
} 
public class IObjectSafetyImpl : IObjectSafety 
{ 
    private const string _IID_IDispatch = "{00020400-0000-0000-C000-000000000046}"; 
    private const string _IID_IDispatchEx = "{a6ef9860-c720-11d0-9337-00a0c90dcaa9}"; 
    private const string _IID_IPersistStorage = "{0000010A-0000-0000-C000-000000000046}"; 
    private const string _IID_IPersistStream = "{00000109-0000-0000-C000-000000000046}"; 
    private const string _IID_IPersistPropertyBag = "{37D84F60-42CB-11CE-8135-00AA004BB851}"; 

    private const int INTERFACESAFE_FOR_UNTRUSTED_CALLER = 0x00000001; 
    private const int INTERFACESAFE_FOR_UNTRUSTED_DATA = 0x00000002; 
    private const int _OK = 0; 
    private const int _FAIL = unchecked((int)0x80004005); 
    private const int _NOINTERFACE = unchecked((int)0x80004002); 

    private bool _fSafeForScripting = true; 
    private bool _fSafeForInitializing = true; 

    public int GetInterfaceSafetyOptions(ref Guid riid, ref int pdwSupportedOptions, ref int pdwEnabledOptions) 
    { 
     int Result = _FAIL; 

     string strGUID = riid.ToString("B"); 
     pdwSupportedOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA; 
     switch (strGUID) 
     { 
      case _IID_IDispatch: 
      case _IID_IDispatchEx: 
       Result = _OK; 
       pdwEnabledOptions = 0; 
       if (_fSafeForScripting == true) 
        pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER; 
       break; 
      case _IID_IPersistStorage: 
      case _IID_IPersistStream: 
      case _IID_IPersistPropertyBag: 
       Result = _OK; 
       pdwEnabledOptions = 0; 
       if (_fSafeForInitializing == true) 
        pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_DATA; 
       break; 
      default: 
       Result = _NOINTERFACE; 
       break; 
     } 

     return Result; 
    } 

    public int SetInterfaceSafetyOptions(ref Guid riid, int dwOptionSetMask, int dwEnabledOptions) 
    { 
     int Result = _FAIL; 

     string strGUID = riid.ToString("B"); 
     switch (strGUID) 
     { 
      case _IID_IDispatch: 
      case _IID_IDispatchEx: 
       if (((dwEnabledOptions & dwOptionSetMask) == INTERFACESAFE_FOR_UNTRUSTED_CALLER) && 
         (_fSafeForScripting == true)) 
        Result = _OK; 
       break; 
      case _IID_IPersistStorage: 
      case _IID_IPersistStream: 
      case _IID_IPersistPropertyBag: 
       if (((dwEnabledOptions & dwOptionSetMask) == INTERFACESAFE_FOR_UNTRUSTED_DATA) && 
         (_fSafeForInitializing == true)) 
        Result = _OK; 
       break; 
      default: 
       Result = _NOINTERFACE; 
       break; 
     } 

     return Result; 
    } 
} 
1
  1. start -> Uruchom -> regedit
  2. idź do HKEY_CURRENT_USER \ Software \ Mi crosoft \ Windows \ CurrentVer Sion \ Internet Settings \ Zones \ 0
  3. Doubleclick 1201 i zmień wartość na 0 (było prawdopodobnie 1)
  4. Zamknij Edytor rejestru
+0

Czy można to uruchomić w skrypcie? – clerktech

2

Można utworzyć .reg plik zmodyfikować klucz rejestru takiego: Wersja

Edytor rejestru systemu Windows 5.00

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ Cu rrentVersion \ Internet Settings \ Zones \ 0] "1201" = dword: 00000000
[HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Internet Settings \ Zones \ 0] "1201" = dword: 00000000

Powiązane problemy