65.9K
CodeProject 正在变化。 阅读更多。
Home

EXE 到 MSI -- 使用 WIX 工具集 v4 的 MSI 包装器

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.27/5 (3投票s)

2018 年 9 月 1 日

CPOL

1分钟阅读

viewsIcon

22519

WIX 模板,用于将 EXE 包装成 MSI 安装程序,以便更轻松地使用组策略进行部署

引言

我想分享一个我用来创建围绕简单 EXE 安装程序的 MSI 安装程序的模板,使用 WIX 工具集 v4。通过将命令行参数传递给 EXE,我们可以执行静默安装,并且如果 EXE 安装不成功,它将回滚。

背景

这些信息主要来自这个网站以及其他网站的整合,以满足我的需求。在这种情况下,我需要将库存代理部署到我公司域中的所有计算机。我喜欢使用 Windows 组策略来部署程序,但您需要 MSI 安装程序才能利用此功能。因此,使用 Visual Studio 2017 和 WIX 工具集 v4\Visual Studio 扩展,我能够完成此操作。

我最初将其用于 Fusion Inventory Agent (http://fusioninventory.org/),并为 x64 和 x86 创建了安装程序。部署代理之后很简单,所有代理设置都通过 MSI 安装程序中的 cmd 参数提供。在 Windows 7/8/10 上测试过。

Using the Code

在“添加/删除程序”窗口中为卸载程序添加您自己的自定义图标。
否则,删除引用图标的 2 行。

确保将 EXE 添加到主项目目录中,以便将其压缩到新的 MSI 安装程序文件中。

将此模板复制到您的 wix 项目文件中,并将下面所有粗体文本更改为匹配您的值。

构建并测试!

**在 Windows 10 下手动运行安装程序时,请确保以“管理员身份运行”和/或使用“兼容模式”。

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">

    <Product Id="*" Name="APPLICATION NAME MSI WRAPPER"
                    Language="1033" Version="1.0.0.0"
                    Manufacturer="company name"
                    UpgradeCode="00000000-YOUR-GUID-0264712d4b1e">
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
    <Media Id="1" Cabinet="myapplication.cab" EmbedCab="yes" />

    <Icon Id="icon.ico" SourceFile="icon.ico" />
    <Property Id="ARPPRODUCTICON" Value="icon.ico" />

    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
        <Feature Id="ProductFeature" Title="APPLICATION NAME MSI WRAPPER" Level="1">
            <ComponentGroupRef Id="ProductComponents" />
            <ComponentRef Id="mysetup" />
        </Feature>

    <CustomAction Id="mysetup" FileKey="setup.exe" ExeCommand='/COMMANDLINE-PARAMATERS /S' 
     Execute="deferred" Impersonate="yes" Return="check" />

    <InstallExecuteSequence>
        <Custom Action="mysetup" Sequence="5401">NOT Installed</Custom>
    </InstallExecuteSequence>
  </Product>
    <Fragment>
        <Directory Id="TARGETDIR" Name="SourceDir">
             <Directory Id="TempFolder" />
        </Directory>
    </Fragment>
    <Fragment>
        <ComponentGroup Id="ProductComponents" Directory="TempFolder">
             <Component Id="mysetup" Guid="00000000-YOUR-GUID-bac606fc74a2">
                   <File Id="setup.exe" Source="YOUR-EXE-FILE.exe" />
             </Component>
        </ComponentGroup>
    </Fragment>
</Wix>

关注点

欢迎提出任何意见。

历史

  • 2018 年 9 月 1 日:初始版本
© . All rights reserved.