如何创建仅具有下载链接的Wix Exepackage

时间:2014-11-10 18:29:23

标签: wix burn wix3.8

我正在尝试在我的捆绑包中创建一个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=&quot;NT AUTHORITY\NETWORK SERVICE&quot; /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 +文件。

2 个答案:

答案 0 :(得分:12)

如果您将捆绑包设置为Compressed=no,则不会在最终捆绑包中包含源文件。您收到“找不到文件”的原因是因为在构建安装程序时,它需要本地版本的程序包EXE文件才能从中获取信息。如果要构建仅具有下载URL的项目,则需要指定RemotePayload元素,并提供有关远程包的更多定义信息。

这将允许您构建安装包而无需在计算机上安装源文件,但您需要确保准确描述了您的有效负载,否则您的安装将失败。

ExePackage元素上,请确保包含Name属性,该属性是SourceFile旁边的必需属性之一,但SourceFile不允许{ {1}}。你的例子包括它,所以你应该没事。

RemotePayload元素包含为<RemotePayload>的子元素,如下所示:

ExePackage

所需的所有信息都是特定包裹的属性。 如果这不是一个选项,您需要确保源文件在构建时本地可用,但确保它没有压缩,因此用户可以安装并从您的URL下载有效负载。

有关详细信息,请参阅RemotePayload参考。

答案 1 :(得分:3)

RyanJ的答案很棒。在我自己找不到合适的魔法组合之后,它让我偏离了正方形。但它仍然需要我一些试验和错误来创建一个实际工作的捆绑wxs文件。因此,对于记录,如果在Visual Studio中创建新的包项目,然后将bundle.wxs内容替换为:

<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如何从包中省略该文件。但这就是我现在理解的方式:

  • '压缩=“否”' - 告诉Burn不要将exe嵌入捆绑中 正在构建的安装程序
  • 'SourceFile =“DLS8Setup.8.5.1.exe”' - 告诉 刻录到项目目录并使用下载的本地目录 目标包的副本,以生成您想要的所有信息 否则必须弄清楚并放入你的RemotePayload记录
  • 'DownloadUrl = ...' - 是我从一开始就很明显的一部分

*“使用你试图捆绑的任何exe”免责声明:我最初尝试使用Git Windows安装程序包这个例子非常难。并且,使用完全相同的语法(以及正确的名称和路径,真的!),捆绑安装总是失败,出现访问错误和日志文件中的“未能获取有效负载”之类的消息。我注意到Git下载唯一奇怪的是它并非真正来自我使用的URL,而是将下载重定向到来自Amazon S3云中的某个地方。我的猜测是Burn / WIX / Windows Installer可能会反对那种狡猾的手 - 而且有点合理。因此,根据您要捆绑的安装程序,您可能必须在自己的控制下为其提供固定的URL,以使其能够使用此功能。