【问题标题】:Custom action during de-installation not executing卸载期间的自定义操作未执行
【发布时间】:2017-11-01 11:46:03
【问题描述】:

我正在使用 installshield 2016 开发 MSI 安装程序。我正在尝试向卸载添加自定义操作,该操作在卸载软件之前运行工具。该工具与软件一起安装,需要以管理员模式运行。该工具旨在在卸载开始之前运行一些手动清理操作。

我使用“新建 EXE > 引用目录的路径”的自定义操作向导添加了一个自定义操作。 INSTALLDIR 在目录表中定义,包含用户定义的安装路径。 .exe 的名称和参数是替代品。

工作目录:INSTALLDIR
文件名和命令行:tool.exe /action parameter1 parameter2 parameter3
退货处理:同步
脚本内执行:系统上下文中的延迟执行
执行计划:始终执行
MSI 型号:3170
在补丁卸载期间运行:否
安装执行序列:在 AnotherCustomAction 之后
安装执行条件:

注意:AnotherCustomAction 设置为在 InstallInitialize 之后执行。它与此非常相似,但执行正确。

(我知道安装执行条件最终应该是 REMOVE="ALL",但我在某些时候删除了它以确保不会导致问题)

INSTALLDIR 属性在安装期间写入注册表;我添加了 AppSearch 和 RegLocator 条目以确保它被回读。

我已在启用日志记录的情况下运行安装程序,并看到以下内容:

MSI (s) (30:14) [13:57:19:162]:执行操作:ActionStart(Name=RunTool,,)
MSI (s) (30:14) [13:57:19:162]:执行操作:CustomActionSchedule(Action=RunTool,ActionType=3170,Source=C:\Installation Test\,Target=tool.exe /action parameter1 parameter2参数3,)
MSI (s) (30:14) [13:57:19:162]:注意:1:1721 2:RunTool 3:C:\Installation Test\ 4:tool.exe /action parameter1 parameter2 parameter3
信息 1721。此 Windows 安装程序包存在问题。无法运行完成此安装所需的程序。请联系您的支持人员或软件包供应商。动作:RunTool,位置:C:\Installation Test\,命令:tool.exe /action parameter1 parameter2 parameter3

如果我进入文件夹 C:\Installation Test\ 并手动运行 tool.exe /action parameter1 parameter2 parameter3,一切正常。有的时候有人提出,可能问题是安装路径有空格,但是新尝试不带空格的路径没有解决。

知道这里出了什么问题吗?这是正确的方法吗?

我无法提供项目本身(公司政策),但我会尽力回答您可能遇到的任何其他问题。

【问题讨论】:

  • AnotherCustomAction 安排在哪里?此 CA 是否安排在 InstallInitialize 和 InstallFinalize 之间?

标签: windows-installer installshield uninstallation custom-action


【解决方案1】:

最可能的问题是您运行的是非模拟 CA,因此它被提升了。这意味着它使用系统帐户运行,因此失败可能与使用此帐户运行而不是从交互式用户上下文中的 shell 运行有关。作为系统,它无法访问任何有意义的用户位置(例如桌面文件夹和其他,HKCU),并且无法与交互式用户的桌面交互(出于安全原因,与不允许与桌面交互的系统服务相同)。它没有工作目录(因为默认值是由资源管理器设置的,而不是您运行的方式),并且它没有网络访问权限。基本上,您需要使用系统帐户运行代码并查看故障点,或者您可能会在代码中看到该列表中的某些内容。

【讨论】:

    【解决方案2】:

    我只有使用 InstallShield 2015 的经验,并且发现自定义操作有时有点棘手,我实际上只是想在 cmets 中发布这个(但我的代表太低)让你尝试而不是回答所以如果这不起作用,希望人们不会过于严厉地反对我。

    首先,将您的返回处理设置为同步(忽略退出代码),然后即使您可以指定正确的文件夹,也请尝试在文件名和命令中明确设置路径,并将您的文件名和参数分别用引号括起来。

    例子:

    工作目录:INSTALLDIR

    文件名和命令行:“[INSTALLDIR]tool.exe”“/action”“parameter1”“parameter2”“parameter3”

    我没有使用 MSI 类型 3170,但已将其用于类型 1122、1058 和 1250。

    正如 Christopher 所提到的,您还需要考虑日程安排,但用引号括起来应该不会有什么坏处。

    祝你好运。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-10
      • 1970-01-01
      • 2012-05-10
      • 2011-03-02
      • 2014-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多