WiX - 如何在安装后更改目录的名称

时间:2012-08-16 06:34:15

标签: wix

非常简单的问题,假设我的应用程序将安装为

myApp
 +-- bin
 +-- lib

我想在安装后将“lib”重命名为“plugins”,我该怎么做?

有一个MoveFiles Element可能会有所帮助,但不知道如何使用它。

修改

这里的问题是,在我的例子中,源文件可以安装到不同的路径中,这种情况在here中描述。

我能弄清楚的唯一方法是创建两个组件组并有条件地安装它们。但是,使用heat两次收集相同的子目录会导致ID conflicting,所以我想使用不同的路径(例如libanother-lib),然后重命名其中一个安装后回来的路径,所以出现了这个问题......

2 个答案:

答案 0 :(得分:3)

别。事先正确安装文件。 Windows Installer跟踪事物的方式将对您的每一步都有所帮助。只需从头开始将文件安装在正确的文件夹中即可。可能不是你想要的答案。

答案 1 :(得分:0)

我终于写了一个C ++程序,用另一个目录结构扩展heat生成的wxs。因此,我们可以决定在不同情况下安装哪条路径。它就像在安装过程中更改名称一样工作。

这是我的程序修补的wxs文件。基本上它会创建另一个目录WEBIDR和不同的子目录,然后添加另一个组件组webGroup供以后条件元素引用。

您可以手动执行相同操作,但如果有数千个文件在等待,并且如果它们经常更新,则可能是程序(或脚本)是更好的选择。

<Fragment>
    <DirectoryRef Id="INSTALLDIR">
        <Directory Id="dirA5528701EE26FFBF346CCE20EE8ACE99" Name="bin">
            <Component Id="cmpEBA9C2A32D81BA8646BD1A64DBB39DB1" Guid="{142C531A-C71C-4890-9318-0FC42026C8FC}">
                <File Id="filDB56E052EC783676CEF361C0C5AA71F3" KeyPath="yes" Source="$(var.runDir)\bin\boost_date_time-vc100-mt-1_47.dll" />
            </Component>
        </Directory>
        <Directory Id="dir3279BEF4E08D9A00D2F205F325F00A81" Name="modules">
            <Component Id="cmpDECCAE13F8937500E4AC367A8EAC95F4" Guid="{85CC0C94-1BFB-4062-BC4E-FBF143921301}">
                <File Id="filDD3B40D68D0437B18B1108FBA49ABC1B" KeyPath="yes" Source="$(var.runDir)\modules\HelloAPI.dll" />
            </Component>
        </Directory>
    </DirectoryRef>
    <DirectoryRef Id="WEBDIR">
        <Component Id="webcmpEBA9C2A32D81BA8646BD1A64DBB39DB1" Guid="{fec110c5-a1a0-4b07-8a35-50f1af84001a}">
            <File Id="webfilDB56E052EC783676CEF361C0C5AA71F3" KeyPath="yes" Source="$(var.runDir)\bin\boost_date_time-vc100-mt-1_47.dll" />
        </Component>
        <Directory Id="webdirpluginF4E08D9A00D2F205F325F00A81" Name="plugins">
            <Component Id="webcmpDECCAE13F8937500E4AC367A8EAC95F4" Guid="{3ef79a47-7681-4991-9726-02db38c22f6d}">
                <File Id="webfilDD3B40D68D0437B18B1108FBA49ABC1B" KeyPath="yes" Source="$(var.runDir)\modules\HelloAPI.dll" />
            </Component>
        </Directory>
    </DirectoryRef>
</Fragment>
<Fragment>
    <ComponentGroup Id="runGroup">
        <ComponentRef Id="cmpEBA9C2A32D81BA8646BD1A64DBB39DB1" />
        <ComponentRef Id="cmpDECCAE13F8937500E4AC367A8EAC95F4" />
    </ComponentGroup>
    <ComponentGroup Id="webGroup">
        <ComponentRef Id="webcmpEBA9C2A32D81BA8646BD1A64DBB39DB1" />
        <ComponentRef Id="webcmpDECCAE13F8937500E4AC367A8EAC95F4" />
    </ComponentGroup>
</Fragment>