ActiveX控件+认证 就不会有安全提示了ActiveX控件在客户中正常使用可以附带安装包嘛。
除此好像没有别的好办法,要有的话,大家都完了,搞个FORMAT的ActiveX那不全搞定:)

解决方案 »

  1.   

    假如有人写病毒怎么办,免不了
    但是可以折衷
    office中有签名工具,但是不会被浏览器认为安全
    你可以导出关于本ACTIVEX注册表文档,要求客户下载导入,这样Active就可以在客户端安装了
      

  2.   

    IObjectSafety + 数字签名
      

  3.   

    LLnju(LLnju),能不能详细一点?
      

  4.   

    if MFC ActiveX
    look msdn "Safe Initialization and Scripting for ActiveX Controls"please search "CreateComponentCategory"if ATL
    #include <Objsafe.h>BEGIN_COM_MAP(CAAA)
    COM_INTERFACE_ENTRY(IAAA)
    COM_INTERFACE_ENTRY(IDispatch)
    END_COM_MAP()
    BEGIN_CATEGORY_MAP(CAAA)
    IMPLEMENTED_CATEGORY(CATID_SafeForScripting)
    IMPLEMENTED_CATEGORY(CATID_SafeForInitializing)
    END_CATEGORY_MAP()
      

  5.   

    实现 IObjectSafety 后,运行后没有安全提示的。用 ATL 行简单,就是两句话:
     CYouClass :
      .........,
      public IObjectSafetyImpl<CYouClass , 3 > //!
    {
      ..........
         BEGIN_COM_MAP(CESHEWord2Html)
          ......
             COM_INTERFACE_ENTRY(IObjectSafety) //!
          ......
         END_COM_MAP()  ..........
    };   如果你要让你的控件能够被下载,必须对控件进行数字签名,你需要一张有效的(根证书被用户安装)证书对控件进行签名,先到 M$ 下载个signcode , 再到 CA( 比如 Verisign 的)去申请证书,好像不便宜的哦。   要想没有下载提示好像编程是没办法的,除了用户选择了 始终信任此证书外,其他情况下还是有下载提示的。
      

  6.   

    抄错地方了, CESHEWord2Html --》 CYouClass
      

  7.   

    是此问题无解,还是下面哪儿有问题:
    HRESULT CreateComponentCategory(CATID catid, WCHAR* catDescription)
    {
        ICatRegister* pcr = NULL ;
        HRESULT hr = S_OK ;

        hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr, 
    NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr);
        if (FAILED(hr))
            return hr;

        // Make sure the HKCR\Component Categories\{..catid...}
        // key is registered.
        CATEGORYINFO catinfo;
        catinfo.catid = catid;
        catinfo.lcid = 0x0409 ; // english

        // Make sure the provided description is not too long.
        // Only copy the first 127 characters if it is.
        int len = wcslen(catDescription);
        if (len>127)
            len = 127;
        wcsncpy(catinfo.szDescription, catDescription, len);
    // Make sure the description is null terminated.
    catinfo.szDescription[len] = '\0';

        hr = pcr->RegisterCategories(1, &catinfo);
    pcr->Release();

    return hr;
    }
    HRESULT RegisterCLSIDInCategory(REFCLSID clsid, CATID catid)
    {
    // Register your component categories information.
        ICatRegister* pcr = NULL ;
        HRESULT hr = S_OK ;
        hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr, 
    NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr);
        if (SUCCEEDED(hr))
        {
    // Register this category as being "implemented" by the class.
    CATID rgcatid[1] ;
    rgcatid[0] = catid;
    hr = pcr->RegisterClassImplCategories(clsid, 1, rgcatid);
        }

        if (pcr != NULL)
            pcr->Release();

    return hr;
    }
    STDAPI DllRegisterServer(void)
    {
        HRESULT  hr;    // return for safety functions AFX_MANAGE_STATE(_afxModuleAddrThis); if (!AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid))
    return ResultFromScode(SELFREG_E_TYPELIB); if (!COleObjectFactoryEx::UpdateRegistryAll(TRUE))
    return ResultFromScode(SELFREG_E_CLASS);    // Mark the control as safe for initializing.
    hr = CreateComponentCategory(CATID_SafeForInitializing,L"Controls safely initializable from persistent data!");
        if (FAILED(hr))
            return hr;    hr = RegisterCLSIDInCategory(CLSID_AVWebClient, CATID_SafeForInitializing);
        if (FAILED(hr))
            return hr;    // Mark the control as safe for scripting.
        hr = CreateComponentCategory(CATID_SafeForScripting,L"Controls safely scriptable!");
        if (FAILED(hr))
            return hr;    hr = RegisterCLSIDInCategory(CLSID_AVWebClient, CATID_SafeForScripting);
        if (FAILED(hr))
            return hr;// return _Module.RegisterServer(TRUE); return NOERROR;
    }
      

  8.   

    MFCActiveX:  LLnju(LLnju) 
    Still,why: muqiao(聪明的牛)
      

  9.   

    //////////////////////safe /////////////////////      const CATID CATID_SafeForScripting1 =
          {0x7dd95801,0x9882,0x11cf,{0x9f,0xa9,0x00,0xaa,0x00,0x6c,0x42,0xc4}};
          const CATID CATID_SafeForInitializing1=
          {0x7dd95802,0x9882,0x11cf,{0x9f,0xa9,0x00,0xaa,0x00,0x6c,0x42,0xc4}};
    const GUID CDECL BASED_CODE _ctlid =
          { 0xF0D3688D, 0xE258, 0x4483,
                  { 0xA1, 0xF7, 0x17, 0x15, 0xF3, 0x6A, 0x4B, 0xCC } };
    //F0D3688D-E258-4483-A1F7-1715F36A4BCC// Helper function to create a component category and associated
          // description
          HRESULT CreateComponentCategory(CATID catid, WCHAR* catDescription)
          {
             ICatRegister* pcr = NULL ;
             HRESULT hr = S_OK ;
       
             hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr,
                                   NULL,
                                   CLSCTX_INPROC_SERVER,
                                   IID_ICatRegister,
                                   (void**)&pcr);
             if (FAILED(hr))
                return hr;
       
             // Make sure the HKCR\Component Categories\{..catid...}
             // key is registered
             CATEGORYINFO catinfo;
             catinfo.catid = catid;
             catinfo.lcid = 0x0409 ; // english
       
             // Make sure the provided description is not too long.
             // Only copy the first 127 characters if it is
             int len = wcslen(catDescription);
             if (len>127)
                len = 127;
             wcsncpy(catinfo.szDescription, catDescription, len);
             // Make sure the description is null terminated
             catinfo.szDescription[len] = '\0';
       
             hr = pcr->RegisterCategories(1, &catinfo);
             pcr->Release();
       
             return hr;
          }
       
          // Helper function to register a CLSID as belonging to a component
          // category
          HRESULT RegisterCLSIDInCategory(REFCLSID clsid, CATID catid)
          {
             // Register your component categories information.
             ICatRegister* pcr = NULL ;
             HRESULT hr = S_OK ;
             hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr,
                                   NULL,
                                   CLSCTX_INPROC_SERVER,
                                   IID_ICatRegister,
                                   (void**)&pcr);
             if (SUCCEEDED(hr))
             {
                // Register this category as being "implemented" by
                // the class.
                CATID rgcatid[1] ;
                rgcatid[0] = catid;
                hr = pcr->RegisterClassImplCategories(clsid, 1, rgcatid);
             }
       
             if (pcr != NULL)
                pcr->Release();
       
             return hr;
          }
    //////////////////safe end///////////////
    STDAPI DllRegisterServer(void)
    { AFX_MANAGE_STATE(_afxModuleAddrThis); if (!AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid))
    return ResultFromScode(SELFREG_E_TYPELIB); if (!COleObjectFactoryEx::UpdateRegistryAll(TRUE))
    return ResultFromScode(SELFREG_E_CLASS); //////////////////safe///////////////
        // Mark the control as safe for initializing.
        if (FAILED( CreateComponentCategory(
                      CATID_SafeForScripting1,
                      L"Controls that are safely scriptable") ))
                    return ResultFromScode(SELFREG_E_CLASS);
       
              if (FAILED( CreateComponentCategory(
                      CATID_SafeForInitializing,
                      L"Controls safely initializable from persistent data") ))
                    return ResultFromScode(SELFREG_E_CLASS);
       
              if (FAILED( RegisterCLSIDInCategory(
                      _ctlid, CATID_SafeForScripting1) ))
                    return ResultFromScode(SELFREG_E_CLASS);
       
              if (FAILED( RegisterCLSIDInCategory(
                      _ctlid, CATID_SafeForInitializing) ))
                    return ResultFromScode(SELFREG_E_CLASS);
        //////////////////safe end///////////////
    return _Module.RegisterServer(TRUE); return NOERROR;
    }