我降低安全设置,ActiveX运行正常,恢复到默认安全设置后。做好了数字签名,数字签名弹出框也正常弹出,也安装了ActiveX控件,但就是不运行ActiveX。说当前页有ActiveX...不能正常显示页面。我的数字签名是自己做的。是不是一定要出钱买的正规数字签名才能在不低安全设置的情况下运行我做的ActiveX啊?

解决方案 »

  1.   

    HRESULT UnRegisterCLSIDInCategory(REFCLSID clsid, CATID catid)
    {
    ICatRegister *pcr = NULL;
    HRESULT hr = S_OK; hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr,NULL,CLSCTX_INPROC_SERVER,IID_ICatRegister,(void**)&pcr);
    if(SUCCEEDED(hr))
    {
    CATID rgcatid[1];
    rgcatid[0] = catid;
    hr = pcr->UnRegisterClassImplCategories(clsid,1,rgcatid);
    }
    if(pcr != NULL)
    pcr->Release(); return hr;
    }HRESULT RegisterCLSIDInCategory(REFCLSID clsid, CATID catid)
    {
    ICatRegister *pcr = NULL;
    HRESULT hr = S_OK; hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr,NULL,CLSCTX_INPROC_SERVER,IID_ICatRegister,(void**)&pcr);
    if(SUCCEEDED(hr))
    {
    CATID rgcatid[1];
    rgcatid[0] = catid;
    hr = pcr->RegisterClassImplCategories(clsid,1,rgcatid);
    }
    if(pcr != NULL)
    pcr->Release(); return hr;
    }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 key
    CATEGORYINFO catinfo;
    catinfo.catid = catid;
    catinfo.lcid = 0x0409; int len = wcslen(catDescription);
    if(len >27)
    len = 27;
    wcsncpy(catinfo.szDescription,catDescription,len); catinfo.szDescription[len] = '\0'; hr = pcr->RegisterCategories(1,&catinfo);
    pcr->Release();
    return hr;
    }
      

  2.   

    加上以上的函数,声明ActiveX控件是代码安全的。
    这样才能与INF中的:
    HKLM,"SOFTWARE\Classes\CLSID\{F385820B-6F9A-4769-9007-ECBB3F6AD43A}\Implemented Categories\{7DD95802-9882-11CF-9FA9-00AA006C42C4}"
    HKLM,"SOFTWARE\Classes\CLSID\{F385820B-6F9A-4769-9007-ECBB3F6AD43A}\Implemented Categories\{7DD95801-9882-11CF-9FA9-00AA006C42C4}"
    一起起作用。
      

  3.   

    在IE6中必须实现IOleSafeControl   改注册表的方式不行