小弟在学习vs2005 c#开发activex 操作过程中,遇到如下问题,烦请各位大侠指教,感谢。以下为主要步骤1.已C# 做好插件UserControl1.dll
2.已做好以插件项为主输出的安装项目,编译后获得可安装文件ControlSetUp.msi
3.已写ControlSetUp.inf 文件
[version]
signature="$CHICAGO$"
AdvancedINF=2.0
[Setup Hooks]
hook1=hook1
[hook1]run=msiexec.exe /i "%EXTRACT_DIR%\ControlSetUP.msi" /qn 
4.已创建cab文件
CABARC.EXE -s 6144 n  c:\ControlSetUp.cab C:\ControlSetUp.msi c:\ControlSetUp.inf5.生成pfx文件
其中,生成pfx 的命令如下:
--------------------------------------
makecert -r -n "CN= cncxz " -b 01/01/2008 -e 01/01/2018 -sv c:\myselfName.pvk c:\myselfName.cer
cert2spc c:\myselfName.cer c:\myselfName.spc 
pvkimprt -pfx c:\myselfName.spc c:\myselfName.pvk以上输入的密码均为:111
--------------------------------------
6. 以上都没有出现问题,下面在出现为cab文件生成添加pfx签名的时候,出错了.
signtool sign /f  C:\MySelfName.pfx c:\ControlSetUp.cab
SignTool Error: The specified PFX password is not correct.望各位大虾不吝赐教,再次感谢。

解决方案 »

  1.   

    好了以上问题处理过了. 现在问题是,签名,生成都完成了.
    就是安装到客户端以后,是个红叉... 貌似没有在客户端没有注册成功.
    相关步骤如下:
    ==================================================================================
    1.编写activex 插件DLL功能组件,并配置生成
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    =============================
    通过IE安全控件认证,实现IObjectSafeTy接口
    &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
    IObjectSafety是一个COM下的接口,对于C++程序来说,只需要实现它就行了,而.NET之下没有这个接口,在这种情况下,我们的ActiveX控件就是一个不带类型库的COM组件,必须使用C#代码重新定义COM接口。
    &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&^^^^^^^^^^^^^^^^^^^^^^^^^^
    实现IObjectSafety接口来向IE表明ActiveX控件的安全标识,以保证控件再次打包时安全标识不会被被改写。
    ^^^^^^^^^^^^^^^^^^^^^^^^^^
    #####################################
        /// <summary>
        /// 创建IObjectSafety接口
        /// </summary>
        [ComImport, Guid("415fa9ac-887c-48da-a7c2-db8fc31c44f1")]
        [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
        public interface IObjectSafety
        {
            [PreserveSig]
            void GetInterfacceSafyOptions(
                int riid,
                out int pdwSupportedOptions,
                out int pdwEnabledOptions);        [PreserveSig]
            void SetInterfaceSafetyOptions(
                int riid,
                int dwOptionsSetMask,
                int dwEnabledOptions);
        } #####################################
    实现IObjectSafety接口代码:
    #####################################
                    #region IObjectSafety 成员        public void GetInterfacceSafyOptions(int riid, out int pdwSupportedOptions, out int pdwEnabledOptions)
            {
                pdwSupportedOptions = 1;
                pdwEnabledOptions = 2;
            }        public void SetInterfaceSafetyOptions(int riid, int dwOptionsSetMask, int dwEnabledOptions)
            {
                throw new System.NotImplementedException();
            }        #endregion #####################################===========================
    2.添加安装项目,以DLL文件项目为主输出,生成activex插件的msi格式的可安装文件=========================
    改动ActiveX控件的主输出文件的属性,将其Register属性改为vsdrpCOM.
    =========================3.编写inf文件(内容见底部)
    4.根据msi文件和inf文件用CABARC.EXE生成cab文件(打包)
    CABARC.EXE -s 6144 n  C:\ControlSetUp.cab C:\ControlSetUp.msi C:\ControlSetUp.inf5.生成pfx密钥(测试证书及密钥)
    ===================makecert -r -n "CN= BroadWay Firm" -b 01/01/2008 -e 01/01/2018 -sv c:\myselfName.pvk c:\myselfName.cer
    cert2spc c:\myselfName.cer c:\myselfName.spc 
    pvkimprt -pfx c:\myselfName.spc c:\myselfName.pvk
    ===================
    6.为cab包签名
    signtool  signwizard给数据盖时间戳
    http://timestamp.verisign.com/scripts/timstamp.dll
    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>以上生成过程中,都没有出问题,最后在客户端安装过以后,显示是个红叉.. 望有知者指教.谢谢附:
    [inf文件]=========================
    [Setup Hooks]
    hook1=hook1[hook1]
    run=msiexec.exe /i %EXTRACT_DIR%\ControlSetUp.msi /qn[Version]
    ; This section is required for compatibility on both Windows 95 and Windows NT.
    Signature="$CHICAGO$"
    AdvancedInf=2.0
    =========================
      

  2.   

    是否浏览器设置问题?默认的自生成的PFX文件需要把站点IP/域名加为信任站点,才行..
      

  3.   

    你用C#开发 是否客户机有安装.NET框架啊
      

  4.   

    你好,我也碰到了用SignTool签名时密码不对的问题
    请问你是怎么解决的,在哪里输入密码?