我想在我的捆绑软件中创建一个[使用DownloadUrl属性]的ExePackage,该软件包下载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 +文件。

最佳答案

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

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

确保在ExePackage元素上包括Name属性,该属性是SourceFile旁边的必需属性之一,但是SourceFile不允许RemotePayload。您的示例包括它,因此您应该可以。

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

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

其中所需的所有信息都是您特定软件包的属性。
如果不是这样,则需要确保在构建时源文件在本地可用,但请确保未压缩该文件,以便用户安装并从URL下载有效负载。

有关更多信息,请参见RemotePayload引用。

09-18 10:56