WiX安装程序msi没有安装使用Visual Studio 2017创建的Winform应用程序

对于简单的测试,我为一个简单的Winform应用程序创建了一个Wix安装程序应用,如下所示。 但是当我运行使用安装程序创建的msi时,它只运行一秒钟并退出而不安装Winform应用程序。 问题 :这里有什么问题? 我的Product.wxs文件似乎缺少某些东西。 注意 :我正在使用VS2017

产生问题的步骤

  1. 从这里安装Wix Toolset Visual Studio 2017 Extension并按照其说明从此处安装WiX 3.11 RC2
  2. 创建了一个默认的Winform project [只添加一个单独的表单]
  3. 在同一解决方案中使用Toolset\v3\Setup Project模板创建了Wix Setup project
  4. 在WiX安装项目中添加了对Winform项目的引用
  5. 构建整个解决方案。
  6. 右键单击安装项目并重新构建它在\..bin\Debug文件夹中创建.msi文件
  7. 双击步骤6中的.msi文件。文件运行一秒钟,出现了Windows 10安装对话框(因为它出现在任何安装中,询问您是否要安装此程序)。 我点击了Yes 。 安装程序再次运行一秒钟然后退出。 但是没有安装Winform应用程序。

默认Product.wxs文件 [除了向Manufacturer属性添加值之外,我没有添加任何内容]

                     <!--  -->  <!--  -->    

“你好WiX”(透明铝请)

我认为你需要的是来自CodeProject的WiX的“Hello World” 。 现在已经很老了,但仍然很擅长向您展示编译MSI的基础知识。

更新 :下面我添加了一个如何从一个全新的WiX 3 Visual Studio项目编译MSI的逐步说明。

以下是另一个回答,其中包含一些关于WiX真实情况的上下文信息: MSI与nuget包:哪种更适合持续交付? 。 您也可以在这里找到“hello world”的链接,还可以找到其他几个链接。

总结 :检查第一个链接以获取WiX的“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数据库。 本质上是文件中的文件系统,包含不同内容的流(例如文件和数据表等)。 只需将其视为具有正常参照完整性的数据库,并首先关注核心表,例如FileComponent


最小的WiX MSI编译 – 循序渐进

让我逐步介绍一下您在新制作的WiX 3项目中可以做些什么,以便使用默认的WiX GUI进行编译。 您可以在答案的最后一部分中将这些更改“合并”为完整示例,但请逐步阅读此内容以使其有意义。

  1. 创建一个新的WiX3项目 。 你知道怎么做,我不会浪费时间去处理细节。

  2. Manufacturer属性设置为您的公司名称。 现在,将您选择的新名称设置为Name属性。 在此示例中,它设置为MinimalTester – 请使用其他内容。

  3. 更改为以在MSI中使用嵌入式cab文件。 这样只创建了MSI,并且没有其他外部CAB文件。

  4. 直接在MediaTemplate元素之后添加: 。 这将为您的MSI添加一个默认的WiX对话框 ,因此它具有更普遍有用的基础知识。 您现在可以运行修复,并根据大多数MSI文件从Installshield或Advanced Installer或其他专业工具提供的内容修改并获得原始安装的向导。 至关重要的是:您的管理安装将有一个对话框,您可以在其中指定应将文件提取到的位置。

  5. 我们将自己的许可协议添加到WiX设置中(否则您将获得一个笨拙的默认协议)。 直接在添加以下元素: 。 现在创建文件TestLicenseAgreement.rtf并将其放在与主WiX源文件相同的文件夹中(快速方式:在Visual Studio中,右键单击项目和“在文件资源管理器中打开文件夹”,现在右键单击创建RTF文件=>新=> RTF文件。也许打开RTF并输入一些测试文本)。 进一步自定义对话框 (位图等)。

  6. WiX对话框集在dll中定义,我们需要引用它。 在Visual Studio WiX项目中: Right click References => Add Reference... => Navigate to C:\Program Files (x86)\WiX Toolset v3.11\bin\ 。 双击WixUIExtension.dll ,最后单击“ OK

  7. 现在在WiX中添加绝对最小组件 ,并将绝对路径指定为源。 这是为了确保您可以编译MSI。 之后你可以创建路径相对或变量(现在直接在INSTALLFOLDER目录元素下添加它):

     
  1. 最后右键单击解决方案中的WiX项目,然后选择Build 。 您可以通过右键单击WiX项目并单击Open Folder in File Explorer来快速测试运行MSI。 现在双击bin然后Debug (如果你切换到发布版本,则发布 – 不确定两种配置之间的“默认差异”)。 您应该在对话框序列的第二个对话框中看到自己的许可协议。

后来的WiX版本对于几乎总是设置为“模板值”的属性具有很好的默认值,或者两个属性本质上是冗余的。 只需将它们从源代码中删除,让WiX编译器使用默认值添加它们。 大惊小怪。

作为示例:上述元素缺少Component Id 。 在编译期间,它默认为它包含的File元素的Id。 依次存在File element Id ,并且默认为Source attribute指定的文件名(这是必需属性)。

也许看一下这个答案的更长的描述和底部的具体例子: WIX中guids的语法? 一旦消除了某些属性的冗余和重复,您的WiX源文件有多简单? 减少文本,减少错误。


示例最小WiX源 – 内联注释

在下面的示例中,组件已移动到默认的ComponentGroup中 – 因此无需指定它所属的function(与上面不同)。

                                  

尝试编译并测试安装。 应该安装到普通系统上的C:\Program Files (x86)\MinimalTester

也许在这里可以看到更多关于WiX教程的链接: WIX Installer没有正确显示WixUI对话框的自定义图像 。

试试这个:

https://github.com/iswix-llc/iswix-tutorials

https://www.youtube.com/watch?v=nnV_OU6fk8c

免责声明:我是IsWiX的维护者,IsWiX是一个FOSS WiX加速器,提供增强的项目模板(脚手架)和图形设计师,为您完成大部分WiX XML繁重工作。 从video中可以看出,这很容易只需几分钟的工作。