【发布时间】:2016-02-20 06:47:44
【问题描述】:
我正在使用 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 属性,因为它将返回默认值。我已经阅读了关于这个主题的几篇文章,我理解这个问题。我在卸载过程中运行的一些自定义安装脚本面临同样的问题。我通过在安装过程中使用注册表存储“用户”选择的安装文件夹然后在卸载过程中检索它来解决这个问题。这行得通。有没有办法将类似的技术应用于运行批处理文件的自定义操作?我的意思是,我能否以某种方式从注册表中查找并摆脱命令行中的 [INSTALLDIR] 语法。
这是一个类似的帖子,但对我来说不是解决方案:
Install file create by InstallShield 2012 sometimes did not get the proper INSTALLDIR when uninstall
【问题讨论】:
-
注意:我确实有一个自定义操作 SetARPINSTALLLOCATION。仅在安装期间将其设置为 [INSTALLDIR](条件 = 未安装)。当我在命令行中使用 [ARPINSTALLLOCATION] 而不是 [INSTALLDIR] 时,我得到一个空字符串。似乎是一个不错的选择,但在这种情况下不起作用。
-
提出这个问题的另一种方式是“我需要一个可以用方括号语法引用的公共属性,其中包含实际的安装目录”。
-
我建议您在问题帖子中包含来自您的 cmets 的所有额外信息,至少以 Note: 开头的那个...
-
当您说其他帖子不是解决方案时,这是否意味着您确实将文件安装到以 INSTALLDIR 作为其目录的组件中,但在维护期间 INSTALLDIR 不正确?维护日志文件中的 INSTALLDIR 是否正确?
-
另一篇文章对我来说不是解决方案的原因是(除了不是很清楚之外)发帖人试图从脚本中获取属性 INSTALLDIR。就我而言,我正在尝试使用带有括号语法的自定义操作(类型 34),并且我需要 INSTALLDIR 属性来扩展为正确的(用户选择的)安装路径。另一位发帖人确实提到他解决了他的问题,但他没有提供足够的细节。
标签: windows batch-file installshield