使用Wix生成MSI

时间:2014-09-22 15:03:08

标签: visual-studio-2012 wix windows-installer wix3

我正在使用Wix 3.8为我创建的Visual Studio项目创建一个MSI安装程序。我跟着this simple tutorial,但即使是这个简单的Wix项目,我也遇到了错误。这是我的

我已将VS2012项目添加为我的Wix安装程序的参考。

这是我的Product.ws文件:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'
   xmlns:iis='http://schemas.microsoft.com/wix/IIsExtension'>
    <Product Id="*" Name="MyProjectInstaller2" Language="1033" Version="2.0.0.0" Manufacturer="Company" UpgradeCode="7f5b63be-bdad-4cc9-b4df-b3f1648c0539">
        <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

        <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
        <MediaTemplate />

        <Feature Id="ProductFeature" Title="MyProjectInstaller2" Level="1">
            <ComponentGroupRef Id="ProductComponents" />
        </Feature>
    </Product>

    <Fragment>
        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFilesFolder">
                <Directory Id="INSTALLFOLDER" Name="MyProjectInstaller2" />
            </Directory>
        </Directory>
    </Fragment>

    <Fragment>
        <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
            <!-- TODO: Remove the comments around this Component element and the ComponentRef below in order to add resources to this installer. -->
            <!-- <Component Id="ProductComponent"> -->
        <File Source="$(var.MyProject.TargetPath)" />
            <!-- </Component> -->
        </ComponentGroup>
    </Fragment>
</Wix>

编译时,我收到以下错误:

The ComponentGroup element contains an unexpected child element 'File'.

我搜索了互联网的内容,以解决这个非常基本的问题。为什么VS2012无法识别元素?

2 个答案:

答案 0 :(得分:5)

您应该遵循下一个层次结构:ComponentGroup - &gt;组件 - &gt;文件等。在您的示例中,我建议您将File元素放入单独的组件中,然后将此组件添加到ComponentGroup中。尝试这样的事情:

<Component Directory="YOUR-DIRECTORY" Guid="your-guid" Id="SomeComponent">
    <File Source="$(var.MyProject.TargetPath)"/>
</Component>
<ComponentGroup Directory="INSTALLFOLDER" Id="ProductComponents">
    <ComponentRef Id="SomeComponent"/>
</ComponentGroup>

答案 1 :(得分:0)

阅读您的 <File Source> 正上方的 TODO 评论 您需要删除围绕 <Component Id="ProductComponent"> and </Component>.

的评论