我想运行批处理文件,我通过以下方式执行:
<CustomAction Id='InstallFilter' FileKey='install' ExeCommand='' Execute='deferred' />
<InstallExecuteSequence>
<Custom Action='InstallFilter' Before='InstallFinalize' />
</InstallExecuteSequence>
这将执行批处理文件,但它在C:\ Windows \ System32(或类似的东西)中运行。我希望它在找到该文件的目录中运行。它不允许我使用FileKey属性指定Directory属性。如何告诉安装程序耗尽特定目录,最好是目录ID。
此外,当我尝试使用脚本卸载我的应用程序时,收到一条错误消息“Windows Installer程序包存在问题。无法运行安装完成所需的程序。”这是有道理的,因为在脚本运行时,文件已被删除。问题是:
如何指定我的操作只应在安装时运行,而不是卸载?
如何卸载此当前副本?
答案 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
。