我正在尝试在我的捆绑包中创建一个ExePackage [使用DownloadUrl属性],下载Sql Express 2014并使用以下代码安装它
<ExePackage Id="Sql2014Express"
DisplayName="SQL Server 2014 Express"
Cache="no"
Compressed="no"
PerMachine="yes"
Permanent="no"
Vital="yes"
Name="SQLEXPRWT_x64_ENU.exe"
DownloadUrl="http://download.microsoft.com/download/E/A/E/EAE6F7FC-767A-4038-A954-49B8B05D04EB/ExpressAndTools%2064BIT/SQLEXPRWT_x64_ENU.exe"
InstallCommand="/ACTION=Install /INSTANCENAME=$(var.InstanceName) /FEATURES=SQL /SECURITYMODE=SQL [SqlVariable] /TCPENABLED=1 /SQLSVCACCOUNT="NT AUTHORITY\NETWORK SERVICE" /SQLSVCSTARTUPTYPE=Auto /SQLSYSADMINACCOUNTS=BUILTIN\Administrators /ADDCURRENTUSERASSQLADMIN=FALSE /Q /HIDECONSOLE /SkipRules=RebootRequiredCheck /IAcceptSQLServerLicenseTerms"
UninstallCommand="/Action=Uninstall /INSTANCENAME=$(var.InstanceName) /FEATURES=SQL /Q /HIDECONSOLE"
DetectCondition="SqlInstanceFound"
InstallCondition="$(var.ServerInstall)">
<ExitCode Value ="3010" Behavior="forceReboot" />
</ExePackage>
当我尝试构建安装程序包时,我收到以下错误....
Error 2 The system cannot find the file 'SourceDir\SQLEXPRWT_x64_ENU.exe'.
我可以将SourceFile属性设置为本地文件,并将其包含在我的安装中,但我宁愿不必使用我的安装程序移动800mb +文件。
答案 0 :(得分:12)
如果您将捆绑包设置为Compressed=no
,则不会在最终捆绑包中包含源文件。您收到“找不到文件”的原因是因为在构建安装程序时,它需要本地版本的程序包EXE文件才能从中获取信息。如果要构建仅具有下载URL的项目,则需要指定RemotePayload
元素,并提供有关远程包的更多定义信息。
这将允许您构建安装包而无需在计算机上安装源文件,但您需要确保准确描述了您的有效负载,否则您的安装将失败。
在ExePackage
元素上,请确保包含Name
属性,该属性是SourceFile
旁边的必需属性之一,但SourceFile
不允许{ {1}}。你的例子包括它,所以你应该没事。
将RemotePayload
元素包含为<RemotePayload>
的子元素,如下所示:
ExePackage
所需的所有信息都是特定包裹的属性。 如果这不是一个选项,您需要确保源文件在构建时本地可用,但确保它没有压缩,因此用户可以安装并从您的URL下载有效负载。
有关详细信息,请参阅RemotePayload参考。
答案 1 :(得分:3)
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Bundle
Name="BundleExperiment"
Version="1.0.0.0"
Manufacturer="Windows User"
UpgradeCode="UNIQUE-GUID-GOES-HERE-YADADADA"
Compressed="no">
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />
<Chain>
<ExePackage Id="DymoLabelSoftware"
SourceFile="DLS8Setup.8.5.1.exe"
DownloadUrl="http://download.dymo.com/dymo/Software/Win/DLS8Setup.8.5.1.exe" />
</Chain>
</Bundle>
你可以看到它是如何工作的,然后修改它以使用你想要捆绑的任何exe包。*
对我来说,确实需要为SourceFile和DownloadUrl指定值并且在项目目录中仍然有下载文件的副本,这实在是违反直觉的。实际上,这不仅仅是违反直觉的。我确信在我的项目目录中没有下载的文件是我告诉Burn如何从包中省略该文件。但这就是我现在理解的方式:
*“使用你试图捆绑的任何exe”免责声明:我最初尝试使用Git Windows安装程序包这个例子非常难。并且,使用完全相同的语法(以及正确的名称和路径,真的!),捆绑安装总是失败,出现访问错误和日志文件中的“未能获取有效负载”之类的消息。我注意到Git下载唯一奇怪的是它并非真正来自我使用的URL,而是将下载重定向到来自Amazon S3云中的某个地方。我的猜测是Burn / WIX / Windows Installer可能会反对那种狡猾的手 - 而且有点合理。因此,根据您要捆绑的安装程序,您可能必须在自己的控制下为其提供固定的URL,以使其能够使用此功能。