4

我正在尝试将我的包合并到一个单独的设置 EXE 文件中并将其上传到 Internet。

我创建了一个 Microsoft 引导程序,其中包含带有项目MSI输出的 Setup.exe,以及必备的 .NET Framework 2.0、Windows Installer 3.1、Visual C++ 2005 redistributables 和 Microsoft ReportViewer。我使用Visual Studio 2008创建了一个安装项目。

现在我正在尝试使用WiX 3.6创建单个压缩设置。我已经在 Visual Studio 2008 中安装了它。

我使用以下命令附加了 setup.exe 和 MSI 文件。

<ExePackage SourceFile ="setup.exe" Compressed ="yes"/>
<MsiPackage SourceFile ="myproject.msi" Compressed ="yes" />

但它无法找到 MSI 文件。我怎样才能在其中包含上述先决条件?

或者我可以在安装时从 Internet 下载上述先决条件吗?我该怎么做?

4

4 回答 4

6

我已经setup.exe从 Visual Studio 中删除了默认设置,并使用 Visual Studio 中的 MSI 文件和依赖项来创建 WiX 3.6 引导程序:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
     xmlns:bal="http://schemas.microsoft.com/wix/BalExtension"
     xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">

    <Bundle Name="My Application"
            Version="1.0"
            IconSourceFile ="E:\logo.ico"
            Manufacturer="My company"
            UpgradeCode="4dcab09d-baba-4837-a913-1206e4c2e743">

        <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense">
            <bal:WixStandardBootstrapperApplication
                LicenseFile="E:\License.rtf"
                SuppressOptionsUI ="yes"
                LogoFile ="logo.ico" />
        </BootstrapperApplicationRef>

        <Chain>
            <ExePackage
                SourceFile ="ReportViewer\ReportViewer.exe"
                Compressed ="yes"
                Vital ="no"
                Permanent ="yes"/>
            <ExePackage
                SourceFile ="vcredist_x86\vcredist_x86.exe"
                Compressed ="yes"
                Vital ="no"
                Permanent ="yes"/>
            <MsiPackage
                SourceFile ="MySetup.msi"
                Compressed ="yes"
                DisplayName ="My Application"
                ForcePerMachine ="yes"/>
        </Chain>
    </Bundle>
</Wix>

它压缩成一个带有先决条件的 EXE 文件。

于 2013-08-16T14:28:46.180 回答
4

SourceFile将接受 .msi 文件的相对路径。或者,如果您使用 WiX 设置项目构建 .msi 文件,则可以在WiX Bootstrapper项目中添加对设置项目的引用。这定义了您可以像这样使用的变量:

<MsiPackage SourceFile ="$(var.myproject.TargetPath)" Compressed ="yes" />

如果您放弃Visual Studio 引导程序并将所有先决条件放入 WiX 引导程序,您的用户可能会获得更好的体验。这对您来说会做更多的工作,因为没有预定义ExePackageGroupExePackage适用于您项目的所有先决条件。

检查定义中应该包含什么信息的最佳位置ExePackage是有关特定先决条件的文档。但是,将其与 Visual Studio Bootstrapper 包(例如,在 中C:\Program Files\Microsoft Visual Studio 9\SDK\v2.0\Bootstrapper\Packages)和可能在 WiX 源代码中预定义的类似先决条件进行比较也是有益的。特别是,在 WiX 源代码中,您会发现ExePackage在安装时如果需要从 Internet 下载 .NET 4。

于 2013-07-05T02:09:38.393 回答
0

您可以包含一些先决条件文件,例如:

 <?xml version="1.0" encoding="UTF-8"?>
 <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
 <Product Id="*" Name="MyApplication" Version="$(var.ProductVersion)" Manufacturer="manuf" Language="1033">

 [...]

 <Directory Id="ANOTHERLOCATION" Name="MyApplicationName">
    <Component Id="ApplicationFiles" Guid="12345678-1234-1234-1235-111111111111">
         <File Id="ApplicationFile4" Source="C:\Users\user\Desktop\requisite.exe"/>
         <CreateFolder />
    </Component>
 </Directory>
 <SetDirectory Id="ANOTHERLOCATION" Value="[WindowsVolume]MyApp" />
         <Feature Id="DefaultFeature" Level="1">
        <ComponentRef Id="ApplicationFiles" />
 </Feature>
 </Product>
 </Wix>

以上复制了 C:/MyApp 中的 requisite.exe 文件。然后,您必须根据某些条件从您的程序中运行 requisite.exe 文件。这是不使用复杂的 Wix 魔法的最基本和最直接的方法。

于 2013-07-04T12:32:07.967 回答
0

您可以使用NSIS 之类的东西来包装您的引导程序和 MSI。您需要编写一个简单的 NSIS 脚本,如下所示:

!define PRODUCT_NAME "YourProductNameHere"

Name "${PRODUCT_NAME}"
OutFile "SetupWrapper.exe"
Icon "Setup.ico"
BrandingText " "
SilentInstall silent

Section

  SetOutPath "$TEMP\${PRODUCT_NAME}"

  ; Add all files that your installer needs here
  File "setup.exe"
  File "product.msi"

  ExecWait "$TEMP\${PRODUCT_NAME}\setup.exe"
  RMDir /r /REBOOTOK "$TEMP\${PRODUCT_NAME}"

SectionEnd

将其保存到名为 SetupWrapper.nsi 的文件中,然后编辑产品名称和 setup.exe 和您的 MSI 文件的路径。现在您可以构建此文件以获取包含引导程序和 MSI 的单个 EXE 文件。

当这个 EXE 运行时,它不会有任何自己的 UI —— 它只会将您的引导程序和 MSI 提取到一个临时文件夹,然后执行引导程序,然后进行清理。

您还可以在项目中添加构建后步骤来构建此包装器,这将自动生成组合包装器 EXE。为此,您可以添加如下命令:

path-to-NSIS\nsis-2.46\makensis.exe /V2 your-project-path\SetupWrapper.nsi
于 2013-08-12T10:53:38.087 回答