打包程序时遇到这个问题,上网搜了一下,解决这个问题需要三个步骤:

1. 按依赖关系添加dll;

2. 在setup factory里,右键需要注册的dll,属性->高级,在红框内打勾;

3. 在Setup Factory的Action页面,On Post Install中,增加以下代码:Shell.Execute("regsvr32", "open", SessionVar.Expand(" /s \"%安装目录%\\XXXX.dll\""));

不过据我试验,第3步是多余的,在2步中勾选上“register”以后,程序会自动添加注册过程的。

再说说第1步。我在打包的过程中遇到的问题是loadlibrary 126,找不到库。这里的库并不是我要注册的库,而是指的它依赖的库。查看dll的依赖项,可以使用depends与inspectExe。前者曾经是VS自带的tool,不过很早就被放弃了。后者在2014年就停止更新了,官网上说只支持到win7,我也没在win10上试过,不过目标机器就是win7,可以用。

安装好inspectExe以后,它被集成到右键菜单中。右击需要查看的dll,选择“属性”,如图所示:

在inspectExe选项卡下点“Test Load”,就可以测试能否成功注册了。弹出窗口如下所示,会列出该dll的依赖项,如果失败,就把所需要的项也打包进去。