2015-11-18 42 views
1

我使用InstallShield 2015并且项目类型是基本MSI。我需要在安装过程以及卸载过程中运行几个不同的批处理文件。对于安装过程,我创建了一个自定义操作来运行EXE(或者我的案例中的批处理文件)。工作文件夹是SystemFolder,命令行如下:InstallShield在使用installdir属性进行卸载时运行批处理文件

"[SystemFolder]cmd.exe" /c "[INSTALLDIR]PrinterInstaller\installPrinterDriver.cmd" [INSTALLDIR]PrinterInstaller\ 

在安装过程中,此工作正常。卸载过程中出现问题。我有另一个自定义的卸载操作:

"[SystemFolder]cmd.exe" /c "[INSTALLDIR]PrinterInstaller\removePrinterDriver.cmd" 

这是不行的。我查看了日志,[installdir]返回了默认路径,而不是用户在安装过程中选择的路径。因此,如果用户在安装过程中接受默认安装路径,则everthing很有用。如果他们选择不同的路径,则卸载过程失败。我研究过这一点,我的错误是我在卸载过程中无法使用INSTALLDIR属性,因为它会返回默认值。我已经阅读了关于这个主题的几篇文章,并且我理解这个问题。我正面临与卸载过程中运行的一些自定义installscript相同的问题。我通过使用注册表在安装过程中存储“用户”选择的安装文件夹,然后在卸载过程中检索它来解决此问题。这工作。有没有办法将类似的技术应用于运行批处理文件的自定义操作?我的意思是,我可以以某种方式从注册表中查找并摆脱我的命令行中的[INSTALLDIR]语法。

下面是一个类似的帖子,但没有一个解决方案,我说:

Install file create by InstallShield 2012 sometimes did not get the proper INSTALLDIR when uninstall

+0

注:我有一个自定义操作SetARPINSTALLLOCATION。它仅在安装期间设置为[INSTALLDIR](条件=未安装)。当我在命令行中使用[ARPINSTALLLOCATION]而不是[INSTALLDIR]时,我得到一个空字符串。看起来像一个很好的选择,但在这种情况下不起作用。 –

+0

提出这个问题的另一种方法是“我需要一个可以用方括号语法引用的公共属性来包含实际的安装目录”。 –

+0

我建议您包含注释中的所有额外信息,至少以[注意:]开头的那个(http://stackoverflow.com/questions/33781658/installshield-running-batch-files-during-uninstall-using -installdir-property#comment55332537_33781658)在您的问题文章中发布... – aschipfl

回答

0

OK,我发现了一个解决方案。我创建了一个系统搜索来读取注册表并检索可以存储到公有属性中的值。以下是步骤: 1.创建系统搜索(使用AppSearch和RegLocator表)。系统搜索将查找注册表中的值,并将其存储到我选择的新公共属性(即REALINSTALLDIR)中。 2.在安装阶段,正确的安装路径将被存储到注册表中,如HKLM \ software \ mycompany \ myproduct。确保此处使用的注册表路径和值与系统搜索中使用的路径/值匹配。 3.将自定义操作更改为使用新属性。

"[SystemFolder]cmd.exe" /c "[REALINSTALLDIR]PrinterInstaller\removePrinterDriver.cmd" 

如果用户接受默认路径,REALINSTALLDIR将包含用户选择的路径或默认路径。这会在卸载阶段正确扩展,因为系统搜索将在运行时填充属性。

以下职位的关键是我的回答: http://forum.installsite.net/index.php?showtopic=10773