2009-05-21 47 views
7

私はRegasmを使用して登録したC#でcomコンポーネントを作成しました。私は今ActiveXObject(...)を使用してIEでこれを使用することができます。私は、その場合には、私はメッセージを取得し、私のIEのセキュリティ設定を変更して、未署名のActiveXコントロールを実行できるようにするしかし、この唯一の作品:このページのActiveXコントロールは安全でない可能性があります

このページ

アンActiveXコントロールは、ページの他の部分と相互作用し、安全でないかもしれません

。この相互作用を許可しますか?

私はいつも、このインタラクションがプロンプトなしで許可されるようにします。これはどのようにして行うことができますか?

おかげ

答えて

5

IEが「安全でない」と表示されないように、ActiveXコントロールはIObjectSafetyインターフェイスを実装する必要があります。プロンプト。私はVB6 ActiveXコントロールのためにこれを数年前に行いました。 This pageの5番目のステップでは、.Netでそれを行う方法が示されています。

私はすでに私はあなたのActiveXクラスは、単純に怒鳴るIObjectSafety class.Seeに画像を継承し、このproblem.Inを解決したこのproblem.After長い散歩に直面している
+0

それはうまくいった!束の親デビッドに感謝します。 – vikasde

+0

これはWebフォームまたはWinフォームに適用されますか? ActiveXページなしでIObjectSafetyを実装できますか? – clerktech

+0

私は「いいえ」と仮定します。私はActiveXコントロールで見ただけです。 – David

0

は、私はあなただけのサイトがフルにレベルを信頼設定することができると思います。

[ツール] - > [インターネットオプション]> [セキュリティ] - > [信頼済みSites-> [サイト]ボタン

+1

Iすでに私の信頼できるリストとしてサイトを追加しました。私はまだプロンプトを得る。 – vikasde

0

this articleを参照のActiveXの署名について。しかし、あなたはまだActiveXを許可する必要があります(それはあなただけの著者として表示されます)。このサイトでActiveXを許可する方法については、Ryanの回答を参照してください。

+0

私はactivexコントロールを許可しても構いませんが、プロンプトが表示され続けると迷惑になります。コントロールはイントラネットでのみ使用されます。署名が役立つかどうかがわかります。 – vikasde

3

:怒鳴る与え enter image description here

IObjectSafetyクラス:

[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. スタート] - > [ファイル名を指定して実行 - > regeditを
  2. ゴー HKEY_CURRENT_USER \ SOFTWARE \ミへcrosoft \ WINDOWS \ CurrentVer シオンインターネットSettings \のゾーンが\ 0
  3. 1201ダブルクリックして値を0に変更します(それがあった おそらく1)
  4. レジストリエディタを終了
+0

これはスクリプトで実行できますか? – clerktech

2

あなたが作成することができます\このようなレジストリキーを変更する.regファイル:

ます。Windows Registry Editor Version 5.00

マイクロソフト\ Windowsの\銅\ [HKEY_LOCAL_MACHINE \ソフトウェアrrentVersion \インターネットSettings \のゾーン\ 0] "1201" = DWORD値:00000000
[HKEY_CURRENT_USER \ SOFTWARE \マイクロソフト\ Windowsの\ CurrentVersionの\インターネットSettings \のゾーン\ 0] "1201" = DWORD値:00000000

関連する問題