维克斯资源: 先放几个链接:
-
WiX 快速入门资源 https://stackoverflow.com/questions/25004226/msi-vs-nuget-packages-which-are-is-better-for-continuous-delivery/25005864#25005864.
-
Hello WiX C# 自定义操作 https://stackoverflow.com/questions/60383913/how-do-i-add-c-sharp-methods-to-an-existing-large-wix-script/60384739#60384739.
“Hello WiX”(请使用透明铝)
我想你需要的是来自 CodeProject 的 WiX 的“Hello World” https://www.codeproject.com/Tips/105638/A-quick-introduction-Create-an-MSI-installer-with。虽然现在已经很老了,但仍然可以很好地向您展示编译工作 MSI 的基础知识。
UPDATE:下面我添加了如何从新的 WiX 3 Visual Studio 项目编译 MSI 的分步说明。
这是另一个很久以前的答案,其中包含一些有关 WiX 真正含义的上下文信息:MSI 与 nuget 包:哪个更适合持续交付? https://stackoverflow.com/questions/25004226/msi-vs-nuget-packages-which-are-is-better-for-continuous-delivery/25005864#25005864。您还可以在这里找到“hello world”的链接,还有其他几个链接。
总之:查看第一个链接获取WinX的“hello world”。然后使用几个测试组件更新您的源代码并重新编译。你应该抓住Orca(SDK工具)能够查看编译后的MSI文件。由于您已经安装了 Visual Studio,请尝试搜索Orca-x86_en-us.msi
并安装它(这是 Microsoft 自己的官方 MSI 查看器和编辑器)。然后在开始菜单中找到 Orca。从技术上讲,Orca 是作为 Windows SDK(而不是 Visual Studio)的一部分安装的,但 Windows SDK 与 Visual Studio 安装捆绑在一起。一旦你有了编译好的 MSI 文件,只需右键单击它并选择Edit with Orca
.
在这样的文件真正有意义之前,需要一些经验。本质上,它是存储在 COM 结构化存储文件 (OLE) 中的原始 MS SQL 数据库。本质上是文件中的文件系统,具有不同内容的流(例如文件和数据表等)。只需将其视为具有正常引用完整性的数据库并关注核心表,例如File
and Component
首先。
最小 WiX MSI 编译 - 分步
让我尝试逐步描述您可以在新制作的 WiX 3 项目中执行哪些操作,以使其使用默认的 WiX GUI 进行编译。您可以在答案的最后一部分中看到这些更改“合并”到完整的示例中,但请逐步阅读此内容,以便它有意义。
-
创建一个新的 WiX3 项目。你知道该怎么做,我不会在细节上浪费时间。
-
Set the Manufacturer
归因于您的公司名称。现在将您选择的新名称设置为Name
属性。在此示例中,它设置为MinimalTester
- 请使用其他东西。
-
Change <MediaTemplate />
to <MediaTemplate EmbedCab="yes" />
在 MSI 中使用嵌入的 cab 文件。这样,仅创建 MSI,并且没有额外的外部 CAB 文件。
-
直接在 MediaTemplate 元素后面添加以下内容:<UIRef Id="WixUI_Mondo" />
。这将添加一个默认 WiX 对话框集到您的 MSI,因此它具有更通用所需的基础知识。现在,您可以运行修复和修改,并获得原始安装向导,该向导与大多数 MSI 文件从 Installshield 或高级安装程序或其他专业工具提供的向导相同。至关重要的是:你的行政安装 https://stackoverflow.com/questions/48317349/msiexec-a-deploying-msi-filewix/48325116#48325116将有一个对话框,您可以在其中指定文件应提取到的位置。
-
我们将把我们自己的许可协议添加到 WiX 设置中(否则您将得到一个含糊不清的默认协议)。直接关注<UIRef Id="WixUI_Mondo" />
添加这个元素:<WixVariable Id="WixUILicenseRtf" Value="TestLicenseAgreement.rtf" />
。现在创建文件TestLicenseAgreement.rtf
并将其放在与主 WiX 源文件相同的文件夹中(快速方法:在 Visual Studio 中,右键单击项目并“在文件资源管理器中打开文件夹”,现在右键单击 => 新建 => RTF 文件创建 RTF 文件
。也许打开 RTF 并输入一些测试文本)。进一步定制对话框 http://wixtoolset.org/documentation/manual/v3/wixui/wixui_customizations.html(位图等)。
-
WiX对话框集是在dll中定义的,我们需要引用它。在您的 Visual Studio WiX 项目中:Right click References => Add Reference... => Navigate to C:\Program Files (x86)\WiX Toolset v3.11\bin\
。双击WixUIExtension.dll
最后点击OK
.
-
现在添加可能的绝对最小组件在 WiX 中,将绝对路径指定为源。这是为了确保您可以编译 MSI。之后,您可以将路径设置为相对路径或变量(只需将其直接添加到INSTALLFOLDER
目前的目录元素):
<Component Feature="ProductFeature">
<File Source="C:\Users\someone\SourceControl\MyProject\CoreApp.exe" />
</Component>
- 最后右键单击解决方案中的 WiX 项目并选择
Build
。您可以通过右键单击 WiX 项目并单击来快速测试运行 MSIOpen Folder in File Explorer
。现在双击bin
进而Debug
(如果您切换到发布版本,则发布 - 不确定两种配置之间的“默认差异”是什么)。您应该在对话框序列的第二个对话框中看到您自己的许可协议。
更高版本的 WiX 版本对几乎总是设置为“模板值”或两个属性本质上是冗余的属性有很好的默认值。只需将它们从源代码中删除,并让 WiX 编译器添加默认值即可。少了很多麻烦。
举个例子:上面的元素缺少一个Component Id
。在编译期间,它默认为其包含的 File 元素的 Id。这File element Id
反过来,也丢失并且将默认为由Source attribute
(这是强制属性)。
也许看看这个答案以获得更长的描述和底部的具体示例:WIX 中的指南语法? https://stackoverflow.com/questions/24732761/syntax-for-guids-in-wix/24769965#24769965一旦您消除了某些属性的所有冗余和重复,您是否会发现您的 WiX 源文件变得多么简单?更少的文字,更少的错误。
最小 WiX 源示例 - 内联评论
在下面的示例中,组件已移至默认的 ComponentGroup 中 - 因此无需指定它所属的功能(与上面不同)。
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<!--CHANGE 0: Set Manufacturer attribute to something, you must also specify a full GUID for UpgradeCode -->
<Product Id="*" Name="MinimalTester" Language="1033" Version="1.0.0.0" Manufacturer="My Company" UpgradeCode="PUT-GUID-HERE">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<!--Standard: <MediaTemplate />-->
<!--CHANGE #1: Enable embedded cab files, so there is only one file generated, the MSI file -->
<MediaTemplate EmbedCab="yes" />
<!--CHANGE #2: Add the following elements to link one of the default WiX GUI sequences and show the specified license agreement. The RTF file must be created and placed next to your WiX source file -->
<UIRef Id="WixUI_Mondo" />
<WixVariable Id="WixUILicenseRtf" Value="TestLicenseAgreement.rtf" />
<!--CHANGE #3: Add WiX dll reference. In Visual Studio WiX project: Right click References => Add Reference... => Navigate to C:\Program Files (x86)\WiX Toolset v3.11\bin\. Double click WixUIExtension.dll. Click OK -->
<Feature Id="ProductFeature" Title="MinimalTester" Level="1">
<ComponentGroupRef Id="ProductComponents" />
</Feature>
</Product>
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLFOLDER" Name="MinimalTester" />
</Directory>
</Directory>
</Fragment>
<Fragment>
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
<!--CHANGE #4: Remove TODO elements, add the most basic component possible as illustrated below -->
<Component>
<File Source="C:\Users\someone\SourceControl\MyProject\CoreApp.exe" />
</Component>
</ComponentGroup>
</Fragment>
</Wix>
尝试编译并测试安装。应该安装到C:\Program Files (x86)\MinimalTester
在正常系统上。
也许可以在这里查看 WiX 教程的更多链接:WIX 安装程序未正确显示 WixUI 对话框的自定义图像 https://stackoverflow.com/questions/47965974/wix-installer-not-displaying-the-custom-image-of-wixui-dialog-correctly/47973061#47973061.