我正在尝试将我的包合并到一个设置的EXE文件中并将其上传到Internet。
我创建了一个Microsoft引导程序,其中包含带有项目MSI输出的Setup.exe,以及先前必需的.NET Framework 2.0,Windows Installer 3.1,Visual C++ 2005可再发行组件和Microsoft { {3}}。我使用ReportViewer创建了一个安装项目。
现在我正在尝试使用Visual Studio 2008 3.6创建单个压缩设置。我已经在Visual Studio 2008中安装了它。
我使用以下命令附加了setup.exe和MSI文件。
<ExePackage SourceFile ="setup.exe" Compressed ="yes"/>
<MsiPackage SourceFile ="myproject.msi" Compressed ="yes" />
但它无法找到MSI文件。我怎样才能包含上述先决条件?
或者我可以在安装时从Internet下载上述先决条件吗?我该怎么做?
答案 0 :(得分:6)
我已从Visual Studio中删除了默认的setup.exe
,并使用了Visual Studio中的MSI文件和依赖项来创建WiX 3.6 Bootstrapper:
<?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文件。
答案 1 :(得分:4)
SourceFile
将接受.msi文件的相对路径。或者,如果要使用WiX安装项目构建.msi文件,则可以在WiX Bootstrapper项目中添加对安装项目的引用。这定义了variables你可以这样使用:
<MsiPackage SourceFile ="$(var.myproject.TargetPath)" Compressed ="yes" />
如果您放弃Visual Studio Bootstrapper并将所有先决条件放在WiX Bootstrapper中,您的用户可能会有更好的体验。对您而言,这将是一项更多的工作,因为您的所有项目的先决条件都没有预先定义的ExePackageGroup
或ExePackage
。
检查有关ExePackage
定义内容的信息的最佳位置是有关特定先决条件的文档。但是,与Visual Studio Bootstrapper软件包(例如,C:\Program Files\Microsoft Visual Studio 9\SDK\v2.0\Bootstrapper\Packages
)和可能在WiX源代码中预定义的类似先决条件进行比较也具有指导意义。特别是,在WiX源代码中,您会发现ExePackage
在安装时根据需要从Internet下载.NET 4。
答案 2 :(得分: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魔法的最基本和最直接的方式。
答案 3 :(得分: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