2017-05-31 113 views
0

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

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

工作目录:INSTALLDIR
文件名&命令行:tool.exe /动作参数1参数参数3
退货处理:同步
在脚本执行:在系统上下文
执行schedulintg延迟执行:始终执行
MSI类型号码:3170
在补丁卸载期间运行:否
安装执行顺序:在AnotherCustomAction之后
安装执行条件:

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

(我知道的安装EXEC条件最终应REMOVE =“ALL”,但我删除,在某些时候,以确保不造成问题)

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

我已经运行安装程序与启用日志记录,并且我看到以下内容:

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

如果我到了文件夹C:\ Installation Test \并手动运行tool.exe/action parameter1参数2参数3,一切都按照它应有的方式工作。在某个时候,有人提出可能问题是安装路径中存在空间,但是如果尝试使用不带空格的路径,则无法解决此问题。

任何想法这里怎么了?这是正确的方法吗?

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

+0

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

回答

0

我只有使用InstallShield 2015的经验,并发现自定义操作有时有点棘手,我其实只是想发表评论(但我的代表太低)让您尝试而不是回答所以希望人们不会太苛刻,如果这不起作用。首先,将您的返回处理设置为同步(忽略退出代码),然后即使您可以指定正确的文件夹,请尝试在文件名和命令中明确设置路径,然后将文件名和参数分别用引号引起来。

例子:

工作目录:INSTALLDIR

文件名&命令行: “[INSTALLDIR] tool.exe” “/动作”, “参数1” “参数2” “参数3”

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

正如克里斯托弗提到的你也会想看看调度,但包装在报价不应该伤害。

祝你好运。

0

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

相关问题