1

我有一个基于 Wix 的安装程序,可以安装两个可执行文件。我想将我自己的自定义文件类型与两个可执行文件相关联

<Component Id="A.exe" Guid="{GUID}">
    <File Id="A.exe" Name="A.exe" Source="../A.exe" KeyPath="yes" Checksum="yes"/>
    <ProgId Id="cfgfilerun" Description="Config file for A" Advertise="no" >
        <Extension Id="cfg" ContentType="application/text" Advertise="no" >
            <Verb Id="Run" Command="Run" TargetFile="A.exe" Argument='"%1"' />
        </Extension>
    </ProgId>
</Component>

然后稍后

<Component Id="B.exe" Guid="{GUID}">
    <File Id="B.exe" Name="B.exe" Source="../B.exe" KeyPath="yes" Checksum="yes"/>
    <ProgId Id="cfgfileopen" Description="Config file" Advertise="no" >
        <Extension Id="cfg" ContentType="application/text" Advertise="no" >
            <Verb Id="Open" Command="Open" TargetFile="B.exe" Argument='"%1"' />
        </Extension>
    </ProgId>
</Component>

不起作用。怎么修?行为是只有一个扩展出现并起作用,一个用于 B。如果我注释掉 B 的 ProgId,那么我会得到一个用于 A。

4

1 回答 1

0

通过将两个文件放在同一个组件中来修复它:

<Component Id="A.exe" Guid="{GUID}">
    <File Id="A.exe" Name="A.exe" Source="../A.exe" KeyPath="yes" Checksum="yes"/>
    <File Id="B.exe" Name="B.exe" Source="../B.exe" Checksum="yes"/>
    <ProgId Id="cfgfilerun" Description="Config file for A" Advertise="no" >
        <Extension Id="cfg" ContentType="application/text" Advertise="no" >
            <Verb Id="Run" Command="Run" TargetFile="A.exe" Argument='"%1"' />
            <Verb Id="Open" Command="Open" TargetFile="B.exe" Argument='"%1"' />
        </Extension>
    </ProgId>
</Component>

我查看了 logging from 的调试输出msiexec,它之前对 cfg 文件所做的操作看起来很糟糕。我认为这是 Wix 中的一个错误,您需要将所有内容都放在同一个组件中。一般来说,我对 Wix 整体有点失望,但我又一次没有使用任何竞争对手。也许所有的 Windows 安装程序都是一团糟。

于 2013-02-24T06:34:17.323 回答