Wix - 如何指定运行批处理文件的目录?

时间:2010-04-21 18:47:55

标签: installer wix custom-action

我想运行批处理文件,我通过以下方式执行:

<CustomAction Id='InstallFilter' FileKey='install' ExeCommand='' Execute='deferred'  />

<InstallExecuteSequence>
    <Custom Action='InstallFilter' Before='InstallFinalize' />
</InstallExecuteSequence>

这将执行批处理文件,但它在C:\ Windows \ System32(或类似的东西)中运行。我希望它在找到该文件的目录中运行。它不允许我使用FileKey属性指定Directory属性。如何告诉安装程序耗尽特定目录,最好是目录ID。

此外,当我尝试使用脚本卸载我的应用程序时,收到一条错误消息“Windows Installer程序包存在问题。无法运行安装完成所需的程序。”这是有道理的,因为在脚本运行时,文件已被删除。问题是:

  1. 如何指定我的操作只应在安装时运行,而不是卸载?

  2. 如何卸载此当前副本?

1 个答案:

答案 0 :(得分:1)

安装程序在提升模式下作为TrustedInstaller用户(管理员)运行。默认情况下,cmd.exe工作文件夹在提升时为C:\Windows\System32。没有办法(或者至少我不知道一个)强制提升cmd.exe的工作文件夹是不同的。 (考虑从随机文件夹运行提升cmd -c some.cmd的安全隐患)

您的脚本可以获取它所在的文件夹,并将当前文件夹更改为:

setlocal
pushd %~dp0

rem ... script logic ...

popd
endlocal

您可以查找不同的条件,这些条件允许您指定自定义操作何时需要在@Cheeso中执行回答他自己的问题how to run custom action on uninstall only。 (不想不必要地复制该信息)

更新:如果NOT INSTALLED不适用于您的具体方案,请尝试NOT REMOVE