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

如何创建只有下载链接的Wix Exepackage,wix,burn,wix3.8,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" Na

我正在尝试在我的捆绑包中创建一个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>

我可以将SourceFile属性设置为本地文件并将其包含在我的安装程序中,但我更希望不必使用我的安装程序移动800mb以上的文件。

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

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

ExePackage
元素上,确保包含
Name
属性,该属性是
SourceFile
旁边的必需属性之一,但是
SourceFile
不允许与
RemotePayload
一起使用。你的例子包括它,所以你应该在那里是好的

元素作为
ExePackage
的子元素包括在内,如下所示:

<RemotePayload Description="MyRemoteApp" ProductName="MyProductName" Size="size-in-bytes" Version="1.1.1.1" Hash="SHA-1-checksum-here"/>

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


有关更多信息,请参阅参考资料。

RyanJ的答案很好。在我自己找不到合适的魔术组合后,这让我失去了平衡。但我仍然需要一些尝试和错误来创建一个实际工作的捆绑wxs文件。因此,作为记录,如果您在Visual Studio中创建一个新的bundle项目,然后将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从包中省略该文件的方式。但我现在是这样理解的:

  • “Compressed=”no“--告诉Burn不要将exe嵌入捆绑包中 它正在建造
  • 'SourceFile=“DLS8Setup.8.5.1.exe”--告诉 Burn转到项目目录并使用下载的本地 目标包的副本,以生成您想要的所有信息 否则,您必须找出并输入RemotePayload记录
  • “DownloadUrl=…”--是我从一开始就很明显的一部分

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

您知道在哪里可以轻松找到各种Microsoft安装的字节大小和md哈希?文件大小可以在下载页上看到,但最简单的方法可能是下载它并使用explorer告诉您。对于SHA-1/MD5,如果下载页面没有列出它,您可以使用系统上支持的任何计算器实用程序进行计算。应该可以为您这样做。对于哈希,您还可以使用Get-FileHash PowerShell命令(在旧系统上可能不可用)@LOST不要忘记-Algorithm SHA1开关,否则默认情况下您将获得SHA256哈希,但它不起作用。@未签名,不确定您为什么进入并拉出“我的编辑”的文本部分。这个交换有非常有用的信息,我浪费了很多时间来查找,因为下载URL术语没有出现在文本或标题中。我把它添加到a)也许有助于搜索,b)把这个词放在问题的第一行,这样有人点击这个问题就会立即看到。
<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>