[译]:WiX Toolset入门——创建一个简单的安装包
博客分类: 官方教程
创建简单示例
在本教程中,我们会创建一个Winform应用程序,然后使用WiX为其创建一个安装程序。
第一步:创建Windows Form应用程序
- 点击文件-新建-项目
- 在项目模板中选择Visual C#节点,然后选择Windows窗体应用程序
- 将应用命名为“MyApplication”,然后点击确定
第二步:为应用创建安装程序
- 点击文件-新建-项目
- 在项目模板里选择Windows Installer XML节点,然后选择Setup Project
- 将项目命名为“MySetup”,然后点击确定
- 在MySetup项目中,右击Referneces,然后选择添加引用
- 切换到项目标签,选中MyApplication项目,然后点击添加按钮,最后点击确定
找到以下注释内容:
<!-- TODO: Insert your files, registry keys, and other resources here. -->
删除此行,并用以下代码替换:
<File Source="$(var.MyApplication.TargetPath)" />
生成WiX项目
至此,就创建完一个可用的安装程序了,你可以用它来安装和卸载应用。
如果你是自己在编辑器里输入代码(不是复制粘贴当前示例),你会注意到智能提示会自动匹配元素和属性名称。在Visual Studio中,在为WiX输入元素或属性时,智能感知能极大的方便我们的输入,为我们减少大量的输入和节省时间。
示例中的那行代码表示WiX工具向安装包中添加一个资源文件。Source 属性指定了生成期间要查找的文件位置。此处我们使用预处理变量来给WiX编译器传递参数,而不是直接将属性内容硬编码。 关于更多预处理器变量的内容,见下一节内容。
使用项目引用和变量
WiX项目支持添加其他项目的引用(如VB,C#)。这一点保证了在生成解决方案时的正确生成顺序。此外,它还会生成一些WiX预处理变量——可以在WiX源代码和预处理定义中进行引用。在编译时,这些参数会传递给编译器。
关于如何添加引用,见上一节内容。
支持的项目引用变量
项目一旦引用,项目变量列表就可以在WiX代码中使用。项目引用变量在你不想进行硬编码时会比较有用。例如,在添加引用之后,我对项目名称进行修改,利用$(var.MyProject.ProjectName)
变量仍然可以正确的查询项目。
以下代码展示了如何在WiX源代码中引用变量:
<File Id="MyExecutable" Name="$(var.MyProject.TargetFileName)" Source="$(var.MyProject.TargetPath)" DiskId="1" />
下表将列举WiX项目中支持的应用变量:
变量名-Variable name | 使用示例-Example usage | 结果示例-Example value |
---|---|---|
var.ProjectName.Configuration | $(var.MyProject.Configuration) | Debug 或 Release |
var.ProjectName.FullConfiguration | $(var.MyProject.FullConfiguration) | Debug|AnyCPU |
var.ProjectName.Platform | $(var.MyProject.Platform) | AnyCPU, Win32, x64 or ia64 |
var.ProjectName.ProjectDir | $(var.MyProject.ProjectDir) | C:\users\myusername\Documents\Visual Studio 2010\Projects\MyProject\ |
var.ProjectName.ProjectExt | $(var.MyProject.ProjectExt) | .csproj |
var.ProjectName.ProjectFileName | $(var.MyProject.ProjectFileName) | MyProject.csproj |
var.ProjectName.ProjectName | $(var.MyProject.ProjectName) | MyProject |
var.ProjectName.ProjectPath | $(var.MyProject.ProjectPath) | C:\users\myusername\Documents\Visual Studio 2010\Projects\MyProject\MyApp.csproj |
var.ProjectName.TargetDir | $(var.MyProject.TargetDir) | C:\users\myusername\Documents\Visual Studio 2010\Projects\MyProject\bin\Debug\ |
var.ProjectName.TargetExt | $(var.MyProject.TargetExt) | .exe |
var.ProjectName.TargetFileName | $(var.MyProject.TargetFileName) | MyProject.exe |
var.ProjectName.TargetName | $(var.MyProject.TargetName) | MyProject |
var.ProjectName.TargetPath | $(var.MyProject.TargetPath) | C:\users\myusername\Documents\Visual Studio 2010\Projects\MyProject\bin\Debug\MyProject.exe |
var.ProjectName.Culture.TargetPath | $(var.MyProject.en-US.TargetPath) | C:\users\myusername\Documents\Visual Studio 2010\Projects\MyProject\bin\Debug\en-US\MyProject.msm |
var.SolutionDir | $(var.SolutionDir) | C:\users\myusername\Documents\Visual Studio 2010\Projects\MySolution\ |
var.SolutionExt | $(var.SolutionExt) | .sln |
var.SolutionFileName | $(var.SolutionFileName) | MySolution.sln |
var.SolutionName | $(var.SolutionName) | MySolution |
var.SolutionPath | $(var.SolutionPath) | C:\users\myusername\Documents\Visual Studio 2010\Projects\MySolution\MySolution.sln |
注意:
var.ProjectName.Culture.TargetPath
仅仅适用于需要生成多种语言的情况。
译:奇葩史