2009-05-21 9 views
7

Ich habe eine COM-Komponente in C# erstellt, die ich mit Regasm registriert. Ich kann dies nun im IE mit ActiveXObject (...) verwenden. Das funktioniert jedoch nur, wenn ich meine IE-Sicherheitseinstellungen ändern und erlaube unsigned ActiveX-Steuerelemente ausführen, wobei ich die Meldung:Ein ActiveX-Steuerelement auf dieser Seite möglicherweise nicht sicher

Ein ActiveX-Steuerelement auf dieser Seite möglicherweise unsicher mit anderen Teilen der Seite interagieren . Möchten Sie diese Interaktion zulassen?

Ich möchte immer IE diese Interaktion ohne die Eingabeaufforderung zulassen. Weiß jemand, wie das gemacht werden kann?

Dank

Antwort

5

Ihr ActiveX-Steuerelement muss die IObjectSafety-Schnittstelle implementieren, damit IE die "unsichere" Fehlermeldung nicht mehr anzeigen kann. prompt. Ich habe dies vor einigen Jahren für eine VB6 ActiveX-Kontrolle getan. Im 5. Schritt von This page wird gezeigt, wie man es in .Net macht.

+0

Das hat funktioniert! Danke, David. – vikasde

+0

Wird dies auf das Webformular oder das Gewinnformular angewendet? Kann die IObjectSafety ohne die ActiveX-Seite implementiert werden? – clerktech

+0

Ich würde "Nein" annehmen. Ich habe es nur mit ActiveX-Steuerelementen gesehen. – David

0

Ich glaube, Sie nur die Websites, auf volles Vertrauen Niveau einstellen.

Tools-> Internet> Sicherheit-> Vertrauenswürdige Stätten-> Schaltfläche Sites

+1

ich schon hat die Seite meiner Vertrauensliste hinzugefügt. Ich bekomme immer noch die Aufforderung. – vikasde

0

Wie für das ActiveX-this article sehen unterzeichnen. Sie müssen jedoch immer noch das ActiveX zulassen (es wird Ihnen nur als Autor angezeigt). Siehe die Antwort von Ryan, wie ActiveX für diese Site zugelassen wird.

+0

Ich habe nichts dagegen, die ActiveX-Kontrolle zu erlauben, aber wenn ich die Eingabeaufforderung bekomme, dann wird es nervig. Die Kontrolle wird sowieso nur in unserem Intranet verwendet. Ich werde sehen, ob das Unterschreiben hilft. – vikasde

3

Ich habe bereits dieses problem.After langen Spaziergang konfrontiert i diese Klasse problem.In Ihre activeX gelöst haben einfach IObjectSafety class.See erben das Bild unten: enter image description here

IObjectSafety Klasse unten gegeben:

[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 -> Ausführen -> regedit
  2. zum HKEY_CURRENT_USER \ Software \ Mi crosoft \ Windows \ CurrentVer sion \ Internet Settings \ Zones \ 0
  3. Doppelklick auf 1201 und den Wert auf 0 geändert werden (es war wahrscheinlich 1)
  4. Schließen Sie den Registrierungs-Editor
+0

Kann dies in einem Skript ausgeführt werden? – clerktech

2

Sie können ein erstellen REG-Datei den Registrierungsschlüssel wie folgt zu ändern:

Windows Registry Editor Version 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

Verwandte Themen