如何从Windows应用程序生成msi

时间:2017-07-02 21:28:52

标签: c# wix windows-installer

我有一个Windows应用程序类,我已经定义了我的Windows服务,我需要从中生成一个.msi(安装程序)。 到目前为止,我所做的是:在Visual Studio Enterprise 2017中创建一个新项目 - 该项目属于Wix v3的Setup Project类型(来自Wix Toolset);在这个项目中我默认有References和Product.wxs。从添加引用,项目,我添加了服务项目。

我发现的其中一个消息来源说,所需要的就是添加

Source="$(var.MyApplication.TargetPath)" />

如下所示: http://wixtoolset.org/documentation/manual/v3/votive/authoring_first_votive_project.html

...但这对我不起作用,因为:

  

未定义的预处理器变量$(var.MyApplication.TargetPath)

我不知道在哪里定义此变量以及此路径的含义是什么。 摘录于此:

<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"> 
                <!-- TODO: Insert files, registry keys, and other resources here. -->
         <File Source = "$(var.MyApplication.TargetPath)"/>
       </Component> 
        </ComponentGroup>

有什么想法吗?

感谢。 这是除文件源行之外的所有自动代码。不知道我应该为INSTALLFOLDER添加什么以及语法应该是什么。 目的是从我的Windows服务

生成.msi

1 个答案:

答案 0 :(得分:1)

此步骤的Wix文档至少从版本3.11开始。

您需要在Windows窗体解决方案中添加Wix设置作为第二个项目,而不是创建两个单独的解决方案(app和Wix)。在应用程序解决方案资源管理器窗格中右键单击解决方案,然后选择添加&gt;新项目。选择像WixSetup这样的名称。

接下来,点击WixSetup项目&gt;参考并选择添加新参考。项目列表应该显示您的应用程序,因为它们位于相同的解决方案中。

接下来,将条目添加到Product.wxs中,但文档也不正确,您需要将其包装在组件选项卡中。 (将MY-APPLICATION-NAME替换为您的Windows窗体应用项目的名称。)

<Component Id="ProductComponent">
    <File Source="$(var.MY-APPLICATION-NAME.TargetPath)" />
</Component>

您还需要编辑.wsx的第3行以包含非空公司名称或删除该属性:

<Product Id="*" Name="WixSetup" Language="1033" Version="1.0.0.0" Manufacturer="MY-COMPANY"

最后,在构建Wix MSI之前,必须在主应用程序中安装发布版本。