【问题标题】:Files not installed when executing custom action in WIX在 WIX 中执行自定义操作时未安装文件
【发布时间】:2010-09-24 06:11:27
【问题描述】:

我正在为要安装的软件包编写 WXS 文件。为了简单起见,假设我想安装 1 个文件,然后我想对它执行一个命令(在我的例子中,它是一个公共 GPG 密钥,我想在安装完成后导入它)。以下是我的 WXS 文件的相关部分:

<CustomAction Id="ImportKey" Directory="INSTALLDIR"
              ExeCommand="[SystemFolder]cmd.exe /C gpg --import keyfile.key"
              Return="check" />

<!-- Install file keyfile.key into C:\GnuPG -->
<Directory Id="TARGETDIR" Name="SourceDir">
    <Directory Id="INSTALLDIR" Name="GnuPG">
        <Component Id="GnuPGConfiguration" Guid="E9469F1C-A875-1014-A3B3-DEF3264B13C4">
            <File Name="keyfile.key" Id="KeyfileKey" />
        </Component>
    </Directory>
</Directory>

<Feature Id="GnuPGConfiguration" Level="1" Title="GnuPG Configuration">
    <ComponentRef Id="GnuPGConfiguration" />
</Feature>

<!-- Run custom action after files are installed -->
<InstallExecuteSequence>
    <Custom Action="ImportKey" After="InstallFiles">NOT Installed AND NOT PATCH</Custom>
</InstallExecuteSequence>

我可以成功构建 MSI。安装时,我使用 msiexec 并打开日志记录。那里说自定义操作的安装失败,并且在日志中找到了正确的命令。手动运行它可以工作。如果我注释掉命令的执行,则文件安装在正确的位置(安装后存在 C:\GnuPG\keyfile.key)。

我没有运行 GPG 命令,而是尝试运行 dir ant 将其输出重定向到文件。查看它,我可以看到 keyfile.key 不在 C:\GnuPG 中的文件中。该命令似乎是在安装文件之前运行的。

关于我做错了什么有什么想法吗?

【问题讨论】:

    标签: wix


    【解决方案1】:

    你需要阅读并理解:

    Installation Phases and In-Script Execution Options for Custom Actions in Windows Installer

    你会发现自己正在考虑需要

    <CustomAction ... Execute="deferred" and Impersonate="no" ... />
    

    此外,您可能需要限定 .key 文件的位置,因为您的当前目录不会是您认为的那样。

    【讨论】:

    • 这解释了一切。谢谢。
    • 如果您有时间,该链接很适合阅读。否则,不准确但足够好的 TL;DR 是“Windows 安装程序两次运行所有阶段,第一次是构建要安装的内容和要运行的脚本。第二阶段它实际执行操作(例如安装文件) . 未延迟的操作在第一阶段运行,不能依赖任何已安装的文件。"
    • 让我把这个添加到你的列表中::) blog.iswix.com/2010/09/read-windows-installer-sdk.html
    猜你喜欢
    • 2013-12-01
    • 2011-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 2019-05-04
    • 2013-06-29
    相关资源
    最近更新 更多