我使用的是InstallShield 2015,项目类型是基本的MSI。我需要在安装过程和卸载过程中运行几个不同的批处理文件。对于安装过程,我创建了一个自定义操作来运行EXE(或者我的情况下是批处理文件)。工作文件夹是SystemFolder,命令行如下:
"[SystemFolder]cmd.exe" /c "[INSTALLDIR]PrinterInstaller\installPrinterDriver.cmd" [INSTALLDIR]PrinterInstaller\
这在安装过程中非常完美。卸载过程中出现问题。我有另一个卸载自定义操作:
"[SystemFolder]cmd.exe" /c "[INSTALLDIR]PrinterInstaller\removePrinterDriver.cmd"
以上情况不起作用。我查看了日志,[installdir]返回默认路径,而不是用户在安装过程中选择的路径。因此,如果用户在安装期间接受默认安装路径,则外观非常有效。如果他们选择不同的路径,则卸载过程将失败。我研究了这个,我的错误是我在卸载期间无法使用INSTALLDIR属性,因为它将返回默认值。我已经阅读了几个关于这个主题的帖子,我理解了这个问题。我在卸载过程中运行的某些自定义installscript遇到了同样的问题。我通过使用注册表来存储"用户"安装期间选择安装文件夹,然后在卸载期间检索它。这有效。有没有办法将类似的技术应用于运行批处理文件的自定义操作?我的意思是,我可以以某种方式从注册表中查找并删除命令行中的[INSTALLDIR]语法。
这是一篇类似的帖子,但对我来说不是解决方案:
Install file create by InstallShield 2012 sometimes did not get the proper INSTALLDIR when uninstall
答案 0 :(得分:0)
好的,我找到了解决方法。我创建了一个系统搜索来读取注册表并检索可以存储到公共PROPERTY中的值。以下是步骤: 1.创建系统搜索(使用AppSearch和RegLocator表)。系统搜索将从注册表中查找值并将其存储到我选择的新公共属性(即REALINSTALLDIR)中。 2.在安装阶段,正确的安装路径将存储在注册表中,例如HKLM \ software \ mycompany \ myproduct。确保此处使用的注册表路径和值与系统搜索中使用的路径/值匹配。 3.更改自定义操作以使用新属性。
"[SystemFolder]cmd.exe" /c "[REALINSTALLDIR]PrinterInstaller\removePrinterDriver.cmd"
REALINSTALLDIR将包含用户选择的路径或默认值(如果用户接受defaut路径)。这在卸载阶段会正确扩展,因为系统搜索将在运行时填充属性。
以下帖子是我答案的关键: http://forum.installsite.net/index.php?showtopic=10773