我用MFC写了一个小程序,生成的exe本身是可以直接运行的,但是用到了 TeeChart8 这个控件,是 ocx 文件,需要先注册才能使用,如果不注册我的小程序就没法启动, 但是我的程序给别人用还得教别人怎么注册,虽然写了一个 bat 运行就可以自己注册,但是还是很麻烦。   想问问,怎么制作一个程序安装包, 可以自动把 ocx 放到不容易被用户误删除的目录,然后自动注册。 这样程序给别人用别人就可以理解了,就是一个需要安装的程序而已。

解决方案 »

  1.   

    在64位Windows下:
    64位exe和dll在目录c:\windows\system32目录下;
    32位exe和dll在目录c:\windows\syswow64目录下;
    所以要注意:
        在win64位系统下注册32位ocx或dll需要将32位ocx或dll拷贝到c:\windows\syswow64\目录下。
        且注册要用c:\windows\syswow64\regsvr32 xxxxxxx.ocx或dll
        在win64位系统下设置32位程序使用的数据库别名要用c:\windows\syswow64\cliconfg.exe
        在win64位系统下设置32位程序使用的系统DSN要用c:\windows\syswow64\odbcad32.exe
    64 位 Windows 平台注意点之文件系统重定向 http://www.cnblogs.com/jiake/p/4981555.html
    64 位 Windows 平台注意点之注册表重定向 http://www.cnblogs.com/jiake/p/4956218.html学会使用depends.exe查看exe依赖的dll
      

  2.   


    我并不是问如何注册 ocx,而是想做一个安装包,用户用安装包安装我的小程序,可以自动注册 ocx
      

  3.   

    已经找到方法,用 ActualInstaller 制作安装包,可以在指定的时间执行指定的文件
      

  4.   

    inno 这个制作安装包挺好的.甚至支持第三方库(比如duilib)皮肤库.
      

  5.   

    我没用过inno,所以我也不知道inno有没有缺点。
      

  6.   

    我个人用 NSIS 多年,做这种相对简单:!include x64.nshName Example
    OutFile Example.exeSection Install
    SetOutPath $INSTDIR // 打包你自己的程序文件(本机路径)
    File /r ".\dir1\*"
    // 创建桌面快捷图标
    CreateShortcut "$DESKTOP\AppName.lnk" "$INSTDIR\app.exe"
    // 创建卸载程序
    WriteUninstaller "$INSTDIR\uninst.exe" SetOutPath $SYSDIR // $SYSDIR: System32 (x86) / SysWow64 (x64) // 打包其他文件(本机路径)
    File ".\dir2\xxx_x86.ocx"
    ExecWait `"$SYSDIR\regsvr32.exe" /s "$SYSDIR\xxx_x86.ocx"` // 如果不考虑64位,这段判断可以不要。
    // 比如你的程序和 ocx 都是32位。
    // 64位平台下释放并注册64位文件
    ${If} ${RunningX64} ${DisableX64FSRedirection} // $SYSDIR: SysWow64 => System32 (x64)
    // 打包其他文件(本机路径)
    File ".\dir2\xxx_x64.ocx"
    ExecWait `"$SYSDIR\regsvr32.exe" /s "$SYSDIR\xxx_x64.ocx"`
    ${EnableX64FSRedirection} // $SYSDIR: System32 => SysWow64 (x64) ${EndIf}
    SectionEnd这是个基本的参考,并没有包含卸载程序。