我想为我的应用程序创建一个安装程序安装程序。我已经下载了WiX 3.6并将其安装在vs 2012上。
返回设置项目
有什么问题?这是我的安装项目product.wxs
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*" Name="SetupProject1" Language="1033" Version="1.0.0.0" Manufacturer="Natiloos" UpgradeCode="cfc2f4dd-2da5-49e2-9099-96968d75aaa4">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<MediaTemplate />
<Feature Id="ProductFeature" Title="SetupProject1" Level="1">
<ComponentGroupRef Id="ProductComponents" />
</Feature>
</Product>
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLFOLDER" Name="SetupProject1" />
</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"> -->
<!-- </Component> -->
</ComponentGroup>
</Fragment>
如何让安装程序正确构建?
答案 0 :(得分:4)
问题是您的安装程序没有安装任何东西。添加项目作为安装程序的参考并不意味着安装程序将包含您的项目输出。在您的安装项目中,您有:
<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"> -->
<!-- </Component> -->
</ComponentGroup>
</Fragment>
您需要添加文件...即。取消注释<Component></Component>
标记并手动添加文件。每个文件都有一个<Component>
标记,这很好。
示例:
<Component Id="MyProgram.exe" Guid="PUT-GUID-HERE">
<File Id="MyProgram.exe" KeyPath="yes" Source="Path_To_Output_Folder\MyProgram.exe" />
</Component>
答案 1 :(得分:0)
您正在描述的类型的WiX项目生成MSI文件,扩展名为.msi。这些安装程序不是直接运行,而是使用msiexec.exe
运行。默认情况下,当您双击它们时,Windows资源管理器会为您执行此操作,但是您可以使用如下命令显式调用msiexec
msiexec MyInstaller.msi
请注意,MSI文件与可执行文件完全不同 - 将安装程序产品的输出名称更改为.exe扩展名,或者将文件重命名为.exe扩展名将无效。
如果要生成基于.exe的安装程序,那么您需要的是一个引导程序。 WiX有一个名为Burn,但如果我是你,我会担心让MSI先行,然后然后担心创建一个可执行的bootstrapper。