【问题标题】:Wix - How do I specify a directory to run a batch file in?Wix - 如何指定运行批处理文件的目录?
【发布时间】:2010-04-22 04:07:06
【问题描述】:

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

<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. 如何卸载当前副本?

【问题讨论】:

    标签: installation wix custom-action


    【解决方案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

    【讨论】:

    • 推送的建议效果很好。谢谢你。不过,我似乎无法让它仅在安装时运行。根据您发送的帖子,我添加了 Not INSTALLED 作为我的自定义操作的值,但它在卸载时仍然运行(并且失败)。有什么建议吗?
    • 嗯..也许我弄错了。我又试了一次,“未安装”似乎奏效了。它不区分大小写,是吗?无论如何,一切正常,谢谢。
    猜你喜欢
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-17
    • 2013-11-02
    • 2011-07-20
    • 2019-12-10
    • 2023-03-12
    相关资源
    最近更新 更多