我注意到每次重建InstallShield项目时,文件PROJECT_ASSISTANT\Interm\ISSetup.dll
都会更新。如documentation中所述,它执行InstallScript自定义操作。
我总是向我的客户提供一个exe PROJECT_ASSISTANT\SINGLE_EXE_IMAGE\DiskImages\DISK1\Setup.exe
,如果没有此ISSetup.dll,安装将顺利运行。
这个ISSetup.dll是否以某种方式打包到单个setup.exe中?如果没有,如何在客户端计算机上执行Installscripts?
我想告诉你项目类型(是基本MSI,InstallScript或InstallScript MSI),但是因为我从命令行构建我的项目(InstallShield 2012 SpringSP1 SAB)并且无法打开项目用于查看属性窗格的GUI模式,我不知道如何从.ism(XML格式)文件中获取此信息。
答案 0 :(得分:3)
我忘记了可能使用它的每个项目类型中包含文件的确切机制(有时它直接在setup.exe
,有时它是间接的)。无论如何,ISSetup.dll
始终是已编译的InstallScript引擎(C ++部分),并且通常将已编译的setup.inx
(InstallScript部分)“流式传输”到其上。某些东西(可能是setup.exe,也许是Windows Installer自定义操作)调用它来运行我们提供的或您编写的InstallScript代码。
所以对原始问题的简短回答是:是的。
要回答未提出的问题,Interm
文件夹是一个中间文件夹,用于暂存内置到setup.exe
或.msi文件中的一些文件,并且ISSetup.dll
肯定接收包含自定义操作的基本MSI或InstallScript MSI的每个版本的更新编译脚本代码。
答案 1 :(得分:2)
我相信 ISSetup.dll 被编译到 MSI的二进制表中,并在msiexec.exe启动msi时提取 - 至少对于基本的MSI文件。
setup.exe 包装器可能包含整个ISSetup.dll - 可能是静态链接或以某种方式嵌入。如果他发现此问题, Michael Uhrman ( Installshield开发人员)可能会发表评论。
<强>更新强>:
我找到了此 ISSetup.dll 文件的一个版本,请参阅下面的 Dependency Walker 屏幕截图。除了看到的导出函数外,还有导出的COM寄存器和取消注册方法(DllRegisterServer,DllUnregisterServer,DllCanUnloadNow,DllGetClassObject)。 f函数必须是各种Installscript函数。前5个函数必须与Installscript MSI相关。