Remote payloads using certificate verification cannot use hash
Fixes 6745
Rob Mensching committed
Jun 1, 2022 at 13:42 UTC
5ea1c1b91ec31461fa26d4104b7113fc326cdbcb
21 files changed
+439
-95
src/ext/NetFx/wixlib/NetCore3.1.12_x64.wxs
+6
-6
@@ -20,8 +20,8 @@
20
<WixVariable Id="AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)RepairArguments" Value="" Overridable="yes" />
21
22
<PackageGroup Id="$(var.AspNetCoreRedistId)">
23
- <ExePackage InstallArguments="$(var.AspNetCoreRedistInstallArguments)" PerMachine="yes" DetectCondition="!(wix.AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition)" InstallCondition="!(wix.AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)InstallCondition)" Id="$(var.AspNetCoreRedistId)" Vital="yes" Permanent="yes" Bundle="yes" LogPathVariable="$(var.AspNetCoreRedistLog)" Cache="remove">
24
- <ExePackagePayload Name="!(wix.AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)PackageDirectory)aspnetcore-runtime-$(var.NetCoreVersion)-win-$(var.NetCorePlatform).exe" DownloadUrl="$(var.AspNetCoreRedistLink)" ProductName="Microsoft ASP.NET Core 3.1.12 - Shared Framework" Description="Microsoft ASP.NET Core 3.1.12 - Shared Framework" CertificatePublicKey="3756E9BBF4461DCD0AA68E0D1FCFFA9CEA47AC18" CertificateThumbprint="2485A7AFA98E178CB8F30C9838346B514AEA4769" Hash="5CE9839CAE90FB2936033431F2905E97C7DC080DC50108D58714939CCCC6A265694B8259A3BF742A68BF04D9CFFB0602B0306DD401C4CE644BDB96C7D1168E59" Size="7841808" Version="3.1.12.21070" />
23
+ <ExePackage CacheId="$(var.AspNetCoreRedistId)_2485A7AFA98E178CB8F30C9838346B514AEA4769" InstallArguments="$(var.AspNetCoreRedistInstallArguments)" PerMachine="yes" DetectCondition="!(wix.AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition)" InstallCondition="!(wix.AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)InstallCondition)" Id="$(var.AspNetCoreRedistId)" Vital="yes" Permanent="yes" Bundle="yes" LogPathVariable="$(var.AspNetCoreRedistLog)" Cache="remove">
24
+ <ExePackagePayload Name="!(wix.AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)PackageDirectory)aspnetcore-runtime-$(var.NetCoreVersion)-win-$(var.NetCorePlatform).exe" DownloadUrl="$(var.AspNetCoreRedistLink)" ProductName="Microsoft ASP.NET Core 3.1.12 - Shared Framework" Description="Microsoft ASP.NET Core 3.1.12 - Shared Framework" CertificatePublicKey="3756E9BBF4461DCD0AA68E0D1FCFFA9CEA47AC18" CertificateThumbprint="2485A7AFA98E178CB8F30C9838346B514AEA4769" Size="7841808" Version="3.1.12.21070" />
25
</ExePackage>
26
</PackageGroup>
27
</Fragment>
@@ -35,8 +35,8 @@
35
<WixVariable Id="DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)RepairArguments" Value="" Overridable="yes" />
36
37
<PackageGroup Id="$(var.DesktopNetCoreRedistId)">
38
- <ExePackage InstallArguments="$(var.DesktopNetCoreRedistInstallArguments)" PerMachine="yes" DetectCondition="!(wix.DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition)" InstallCondition="!(wix.DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)InstallCondition)" Id="$(var.DesktopNetCoreRedistId)" Vital="yes" Permanent="yes" Bundle="yes" LogPathVariable="$(var.DesktopNetCoreRedistLog)" Cache="remove">
39
- <ExePackagePayload Name="!(wix.DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)PackageDirectory)windowsdesktop-runtime-$(var.NetCoreVersion)-win-$(var.NetCorePlatform).exe" DownloadUrl="$(var.DesktopNetCoreRedistLink)" ProductName="Microsoft Windows Desktop Runtime - 3.1.12 (x64)" Description="Microsoft Windows Desktop Runtime - 3.1.12 (x64)" CertificatePublicKey="3756E9BBF4461DCD0AA68E0D1FCFFA9CEA47AC18" CertificateThumbprint="2485A7AFA98E178CB8F30C9838346B514AEA4769" Hash="CD69B8722B2FF175FADD6774AB6A97F89292FC57A15CEC95218E79FFF1E26F46A7EFFFB15CE0F6D22B83B991F7083BB5C04F5158F87D298EA0F204933F8ECD27" Size="54284816" Version="3.1.12.29719" />
38
+ <ExePackage CacheId="$(var.DesktopNetCoreRedistId)_2485A7AFA98E178CB8F30C9838346B514AEA4769" InstallArguments="$(var.DesktopNetCoreRedistInstallArguments)" PerMachine="yes" DetectCondition="!(wix.DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition)" InstallCondition="!(wix.DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)InstallCondition)" Id="$(var.DesktopNetCoreRedistId)" Vital="yes" Permanent="yes" Bundle="yes" LogPathVariable="$(var.DesktopNetCoreRedistLog)" Cache="remove">
39
+ <ExePackagePayload Name="!(wix.DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)PackageDirectory)windowsdesktop-runtime-$(var.NetCoreVersion)-win-$(var.NetCorePlatform).exe" DownloadUrl="$(var.DesktopNetCoreRedistLink)" ProductName="Microsoft Windows Desktop Runtime - 3.1.12 (x64)" Description="Microsoft Windows Desktop Runtime - 3.1.12 (x64)" CertificatePublicKey="3756E9BBF4461DCD0AA68E0D1FCFFA9CEA47AC18" CertificateThumbprint="2485A7AFA98E178CB8F30C9838346B514AEA4769" Size="54284816" Version="3.1.12.29719" />
40
</ExePackage>
41
</PackageGroup>
42
</Fragment>
@@ -50,8 +50,8 @@
50
<WixVariable Id="DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)RepairArguments" Value="" Overridable="yes" />
51
52
<PackageGroup Id="$(var.DotNetCoreRedistId)">
53
- <ExePackage InstallArguments="$(var.DotNetCoreRedistInstallArguments)" PerMachine="yes" DetectCondition="!(wix.DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition)" InstallCondition="!(wix.DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)InstallCondition)" Id="$(var.DotNetCoreRedistId)" Vital="yes" Permanent="yes" Protocol="burn" LogPathVariable="$(var.DotNetCoreRedistLog)" Cache="remove">
54
- <ExePackagePayload Name="!(wix.DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)PackageDirectory)dotnet-runtime-$(var.NetCoreVersion)-win-$(var.NetCorePlatform).exe" DownloadUrl="$(var.DotNetCoreRedistLink)" ProductName="Microsoft .NET Core Runtime - 3.1.12 (x64)" Description="Microsoft .NET Core Runtime - 3.1.12 (x64)" CertificatePublicKey="3756E9BBF4461DCD0AA68E0D1FCFFA9CEA47AC18" CertificateThumbprint="2485A7AFA98E178CB8F30C9838346B514AEA4769" Hash="9B3F882AE5DFDC8B50D3CEC4F3292292D658B2FECB84B3F73426FB3C16E6FC6B8E7118EF559CFAE25ED7A2C175FA4D89E18986CA3C05D15F706524FBB667F702" Size="26090616" Version="3.1.12.29719" />
53
+ <ExePackage CacheId="$(var.DotNetCoreRedistId)_2485A7AFA98E178CB8F30C9838346B514AEA4769" InstallArguments="$(var.DotNetCoreRedistInstallArguments)" PerMachine="yes" DetectCondition="!(wix.DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition)" InstallCondition="!(wix.DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)InstallCondition)" Id="$(var.DotNetCoreRedistId)" Vital="yes" Permanent="yes" Protocol="burn" LogPathVariable="$(var.DotNetCoreRedistLog)" Cache="remove">
54
+ <ExePackagePayload Name="!(wix.DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)PackageDirectory)dotnet-runtime-$(var.NetCoreVersion)-win-$(var.NetCorePlatform).exe" DownloadUrl="$(var.DotNetCoreRedistLink)" ProductName="Microsoft .NET Core Runtime - 3.1.12 (x64)" Description="Microsoft .NET Core Runtime - 3.1.12 (x64)" CertificatePublicKey="3756E9BBF4461DCD0AA68E0D1FCFFA9CEA47AC18" CertificateThumbprint="2485A7AFA98E178CB8F30C9838346B514AEA4769" Size="26090616" Version="3.1.12.29719" />
55
</ExePackage>
56
</PackageGroup>
57
</Fragment>
src/ext/NetFx/wixlib/NetCore3.1.12_x86.wxs
+6
-6
@@ -20,8 +20,8 @@
20
<WixVariable Id="AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)RepairArguments" Value="" Overridable="yes" />
21
22
<PackageGroup Id="$(var.AspNetCoreRedistId)">
23
- <ExePackage InstallArguments="$(var.AspNetCoreRedistInstallArguments)" PerMachine="yes" DetectCondition="!(wix.AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition)" InstallCondition="!(wix.AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)InstallCondition)" Id="$(var.AspNetCoreRedistId)" Vital="yes" Permanent="yes" Protocol="burn" LogPathVariable="$(var.AspNetCoreRedistLog)" Cache="remove">
24
- <ExePackagePayload Name="!(wix.AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)PackageDirectory)aspnetcore-runtime-$(var.NetCoreVersion)-win-$(var.NetCorePlatform).exe" DownloadUrl="$(var.AspNetCoreRedistLink)" ProductName="Microsoft ASP.NET Core 3.1.12 - Shared Framework" Description="Microsoft ASP.NET Core 3.1.12 - Shared Framework" CertificatePublicKey="3756E9BBF4461DCD0AA68E0D1FCFFA9CEA47AC18" CertificateThumbprint="2485A7AFA98E178CB8F30C9838346B514AEA4769" Hash="03EE5F6D3B2AF8FFE2A5154BB05E50938E2D36E98D996D9E67A3C349DD0C8B3051D5A9628F48C51E006CEA0B1F4484B4BE51920FE5CA841060B0D2C6A12FD5D2" Size="7167176" Version="3.1.12.21070" />
23
+ <ExePackage CacheId="$(var.AspNetCoreRedistId)_2485A7AFA98E178CB8F30C9838346B514AEA4769" InstallArguments="$(var.AspNetCoreRedistInstallArguments)" PerMachine="yes" DetectCondition="!(wix.AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition)" InstallCondition="!(wix.AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)InstallCondition)" Id="$(var.AspNetCoreRedistId)" Vital="yes" Permanent="yes" Protocol="burn" LogPathVariable="$(var.AspNetCoreRedistLog)" Cache="remove">
24
+ <ExePackagePayload Name="!(wix.AspNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)PackageDirectory)aspnetcore-runtime-$(var.NetCoreVersion)-win-$(var.NetCorePlatform).exe" DownloadUrl="$(var.AspNetCoreRedistLink)" ProductName="Microsoft ASP.NET Core 3.1.12 - Shared Framework" Description="Microsoft ASP.NET Core 3.1.12 - Shared Framework" CertificatePublicKey="3756E9BBF4461DCD0AA68E0D1FCFFA9CEA47AC18" CertificateThumbprint="2485A7AFA98E178CB8F30C9838346B514AEA4769" Size="7167176" Version="3.1.12.21070" />
25
</ExePackage>
26
</PackageGroup>
27
</Fragment>
@@ -35,8 +35,8 @@
35
<WixVariable Id="DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)RepairArguments" Value="" Overridable="yes" />
36
37
<PackageGroup Id="$(var.DesktopNetCoreRedistId)">
38
- <ExePackage InstallArguments="$(var.DesktopNetCoreRedistInstallArguments)" PerMachine="yes" DetectCondition="!(wix.DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition)" InstallCondition="!(wix.DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)InstallCondition)" Id="$(var.DesktopNetCoreRedistId)" Vital="yes" Permanent="yes" Protocol="burn" LogPathVariable="$(var.DesktopNetCoreRedistLog)" Cache="remove">
39
- <ExePackagePayload Name="!(wix.DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)PackageDirectory)windowsdesktop-runtime-$(var.NetCoreVersion)-win-$(var.NetCorePlatform).exe" DownloadUrl="$(var.DesktopNetCoreRedistLink)" ProductName="Microsoft Windows Desktop Runtime - 3.1.12 (x86)" Description="Microsoft Windows Desktop Runtime - 3.1.12 (x86)" CertificatePublicKey="3756E9BBF4461DCD0AA68E0D1FCFFA9CEA47AC18" CertificateThumbprint="2485A7AFA98E178CB8F30C9838346B514AEA4769" Hash="C211A7F29D9B6FEEFCF0379B153FFBFB815157D3D494CFD7D0D84D619701EEA284BF12502094BCFF2BB2968213190454E7CE0E865FD623E78C2FCDAEBEF963DA" Size="48590696" Version="3.1.12.29719" />
38
+ <ExePackage CacheId="$(var.DesktopNetCoreRedistId)_2485A7AFA98E178CB8F30C9838346B514AEA4769" InstallArguments="$(var.DesktopNetCoreRedistInstallArguments)" PerMachine="yes" DetectCondition="!(wix.DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition)" InstallCondition="!(wix.DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)InstallCondition)" Id="$(var.DesktopNetCoreRedistId)" Vital="yes" Permanent="yes" Protocol="burn" LogPathVariable="$(var.DesktopNetCoreRedistLog)" Cache="remove">
39
+ <ExePackagePayload Name="!(wix.DesktopNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)PackageDirectory)windowsdesktop-runtime-$(var.NetCoreVersion)-win-$(var.NetCorePlatform).exe" DownloadUrl="$(var.DesktopNetCoreRedistLink)" ProductName="Microsoft Windows Desktop Runtime - 3.1.12 (x86)" Description="Microsoft Windows Desktop Runtime - 3.1.12 (x86)" CertificatePublicKey="3756E9BBF4461DCD0AA68E0D1FCFFA9CEA47AC18" CertificateThumbprint="2485A7AFA98E178CB8F30C9838346B514AEA4769" Size="48590696" Version="3.1.12.29719" />
40
</ExePackage>
41
</PackageGroup>
42
</Fragment>
@@ -50,8 +50,8 @@
50
<WixVariable Id="DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)RepairArguments" Value="" Overridable="yes" />
51
52
<PackageGroup Id="$(var.DotNetCoreRedistId)">
53
- <ExePackage InstallArguments="$(var.DotNetCoreRedistInstallArguments)" PerMachine="yes" DetectCondition="!(wix.DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition)" InstallCondition="!(wix.DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)InstallCondition)" Id="$(var.DotNetCoreRedistId)" Vital="yes" Permanent="yes" Protocol="burn" LogPathVariable="$(var.DotNetCoreRedistLog)" Cache="remove">
54
- <ExePackagePayload Name="!(wix.DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)PackageDirectory)dotnet-runtime-$(var.NetCoreVersion)-win-$(var.NetCorePlatform).exe" DownloadUrl="$(var.DotNetCoreRedistLink)" ProductName="Microsoft .NET Core Runtime - 3.1.12 (x86)" Description="Microsoft .NET Core Runtime - 3.1.12 (x86)" CertificatePublicKey="3756E9BBF4461DCD0AA68E0D1FCFFA9CEA47AC18" CertificateThumbprint="2485A7AFA98E178CB8F30C9838346B514AEA4769" Hash="BA18F9028B19630D91017BEACCD8D79388125C228A83B5A62306108F3BB283617A7ED9B98785BC73192EC00E5D186DA767E940DCAB388699FAF274E437D0C16F" Size="23392184" Version="3.1.12.29719" />
53
+ <ExePackage CacheId="$(var.DotNetCoreRedistId)_2485A7AFA98E178CB8F30C9838346B514AEA4769" InstallArguments="$(var.DotNetCoreRedistInstallArguments)" PerMachine="yes" DetectCondition="!(wix.DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)DetectCondition)" InstallCondition="!(wix.DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)InstallCondition)" Id="$(var.DotNetCoreRedistId)" Vital="yes" Permanent="yes" Protocol="burn" LogPathVariable="$(var.DotNetCoreRedistLog)" Cache="remove">
54
+ <ExePackagePayload Name="!(wix.DotNetCoreRuntime$(var.NetCoreIdVersion)Redist$(var.NetCorePlatform)PackageDirectory)dotnet-runtime-$(var.NetCoreVersion)-win-$(var.NetCorePlatform).exe" DownloadUrl="$(var.DotNetCoreRedistLink)" ProductName="Microsoft .NET Core Runtime - 3.1.12 (x86)" Description="Microsoft .NET Core Runtime - 3.1.12 (x86)" CertificatePublicKey="3756E9BBF4461DCD0AA68E0D1FCFFA9CEA47AC18" CertificateThumbprint="2485A7AFA98E178CB8F30C9838346B514AEA4769" Size="23392184" Version="3.1.12.29719" />
55
</ExePackage>
56
</PackageGroup>
57
</Fragment>
src/ext/NetFx/wixlib/NetFx462.wxs
+4
-4
@@ -29,8 +29,8 @@
29
<WixVariable Id="NetFx462WebPackageDirectory" Value="redist\" Overridable="yes" />
30
31
<PackageGroup Id="$(var.NetFx462WebId)">
32
- <ExePackage InstallArguments="/q /norestart /log "[NetFx462FullLog].html"" PerMachine="yes" DetectCondition="!(wix.NetFx462WebDetectCondition)" InstallCondition="!(wix.NetFx462WebInstallCondition)" Id="$(var.NetFx462WebId)" Vital="yes" Permanent="yes" Protocol="netfx4" LogPathVariable="NetFx462FullLog" Cache="remove">
33
- <ExePackagePayload Name="!(wix.NetFx462WebPackageDirectory)NDP462-KB3151802-Web.exe" DownloadUrl="$(var.NetFx462WebLink)" ProductName="Microsoft .NET Framework 4.6.2" Description="Microsoft .NET Framework 4.6.2 Setup" CertificatePublicKey="F49F9B33E25E33CCA0BFB15A62B7C29FFAB3880B" CertificateThumbprint="ABDCA79AF9DD48A0EA702AD45260B3C03093FB4B" Hash="D944304952F35B6F49CDA0C6364B55CCB4DF92B134634E594B0496A346B496D3AB709655292595A5D86D44C86C81F19926F84EFF7B87608740B39C12441920A3" Size="1404536" Version="4.6.1590.0" />
32
+ <ExePackage CacheId="$(var.NetFx462WebId)_ABDCA79AF9DD48A0EA702AD45260B3C03093FB4B" InstallArguments="/q /norestart /log "[NetFx462FullLog].html"" PerMachine="yes" DetectCondition="!(wix.NetFx462WebDetectCondition)" InstallCondition="!(wix.NetFx462WebInstallCondition)" Id="$(var.NetFx462WebId)" Vital="yes" Permanent="yes" Protocol="netfx4" LogPathVariable="NetFx462FullLog" Cache="remove">
33
+ <ExePackagePayload Name="!(wix.NetFx462WebPackageDirectory)NDP462-KB3151802-Web.exe" DownloadUrl="$(var.NetFx462WebLink)" ProductName="Microsoft .NET Framework 4.6.2" Description="Microsoft .NET Framework 4.6.2 Setup" CertificatePublicKey="F49F9B33E25E33CCA0BFB15A62B7C29FFAB3880B" CertificateThumbprint="ABDCA79AF9DD48A0EA702AD45260B3C03093FB4B" Size="1404536" Version="4.6.1590.0" />
34
</ExePackage>
35
</PackageGroup>
36
</Fragment>
@@ -51,8 +51,8 @@
51
<WixVariable Id="NetFx462RedistPackageDirectory" Value="redist\" Overridable="yes" />
52
53
<PackageGroup Id="$(var.NetFx462RedistId)">
54
- <ExePackage InstallArguments="/q /norestart /log "[NetFx462FullLog].html"" UninstallArguments="/uninstall /q /norestart /log "[NetFx462FullLog].html"" PerMachine="yes" DetectCondition="!(wix.NetFx462RedistDetectCondition)" InstallCondition="!(wix.NetFx462RedistInstallCondition)" Id="$(var.NetFx462RedistId)" Vital="yes" Permanent="yes" Protocol="netfx4" LogPathVariable="NetFx462FullLog">
55
- <ExePackagePayload Name="!(wix.NetFx462RedistPackageDirectory)NDP462-KB3151800-x86-x64-AllOS-ENU.exe" DownloadUrl="$(var.NetFx462RedistLink)" ProductName="Microsoft .NET Framework 4.6.2" Description="Microsoft .NET Framework 4.6.2 Setup" CertificatePublicKey="F49F9B33E25E33CCA0BFB15A62B7C29FFAB3880B" CertificateThumbprint="ABDCA79AF9DD48A0EA702AD45260B3C03093FB4B" Hash="045F1AB9AC0126D01494F933EF10DD81B2CC71E1C23A7F2871F06EBAE7A0538467A21ADB461FBFB5EB394BF80A850FF4DCA5EEFDEC17CC3714082018ED372F7A" Size="62000832" Version="4.6.1590.0" />
54
+ <ExePackage CacheId="$(var.NetFx462RedistId)_ABDCA79AF9DD48A0EA702AD45260B3C03093FB4B" InstallArguments="/q /norestart /log "[NetFx462FullLog].html"" UninstallArguments="/uninstall /q /norestart /log "[NetFx462FullLog].html"" PerMachine="yes" DetectCondition="!(wix.NetFx462RedistDetectCondition)" InstallCondition="!(wix.NetFx462RedistInstallCondition)" Id="$(var.NetFx462RedistId)" Vital="yes" Permanent="yes" Protocol="netfx4" LogPathVariable="NetFx462FullLog">
55
+ <ExePackagePayload Name="!(wix.NetFx462RedistPackageDirectory)NDP462-KB3151800-x86-x64-AllOS-ENU.exe" DownloadUrl="$(var.NetFx462RedistLink)" ProductName="Microsoft .NET Framework 4.6.2" Description="Microsoft .NET Framework 4.6.2 Setup" CertificatePublicKey="F49F9B33E25E33CCA0BFB15A62B7C29FFAB3880B" CertificateThumbprint="ABDCA79AF9DD48A0EA702AD45260B3C03093FB4B" Size="62000832" Version="4.6.1590.0" />
56
</ExePackage>
57
</PackageGroup>
58
</Fragment>
src/ext/NetFx/wixlib/NetFx472.wxs
+4
-4
@@ -29,8 +29,8 @@
29
<WixVariable Id="NetFx472WebPackageDirectory" Value="redist\" Overridable="yes" />
30
31
<PackageGroup Id="$(var.NetFx472WebId)">
32
- <ExePackage InstallArguments="/q /norestart /log "[NetFx472WebLog].html"" PerMachine="yes" DetectCondition="!(wix.NetFx472WebDetectCondition)" InstallCondition="!(wix.NetFx472WebInstallCondition)" Id="$(var.NetFx472WebId)" Vital="yes" Permanent="yes" Protocol="netfx4" LogPathVariable="NetFx472WebLog" Cache="remove">
33
- <ExePackagePayload Name="!(wix.NetFx472WebPackageDirectory)NDP472-KB4054531-Web.exe" DownloadUrl="$(var.NetFx472WebLink)" ProductName="Microsoft .NET Framework 4.7.2" Description="Microsoft .NET Framework 4.7.2 Setup" CertificatePublicKey="F49F9B33E25E33CCA0BFB15A62B7C29FFAB3880B" CertificateThumbprint="ABDCA79AF9DD48A0EA702AD45260B3C03093FB4B" Hash="99B1D7F9264E7D5AEA7B01B69EF541065030055A37CFD76F9846B3CC84FD6F2BAB612042D68DDF992BDA41553C493FB45830699BA5F56AB0AEE200CC539CC5D8" Size="1405792" Version="4.7.3081.0" />
32
+ <ExePackage CacheId="$(var.NetFx472WebId)_ABDCA79AF9DD48A0EA702AD45260B3C03093FB4B" InstallArguments="/q /norestart /log "[NetFx472WebLog].html"" PerMachine="yes" DetectCondition="!(wix.NetFx472WebDetectCondition)" InstallCondition="!(wix.NetFx472WebInstallCondition)" Id="$(var.NetFx472WebId)" Vital="yes" Permanent="yes" Protocol="netfx4" LogPathVariable="NetFx472WebLog" Cache="remove">
33
+ <ExePackagePayload Name="!(wix.NetFx472WebPackageDirectory)NDP472-KB4054531-Web.exe" DownloadUrl="$(var.NetFx472WebLink)" ProductName="Microsoft .NET Framework 4.7.2" Description="Microsoft .NET Framework 4.7.2 Setup" CertificatePublicKey="F49F9B33E25E33CCA0BFB15A62B7C29FFAB3880B" CertificateThumbprint="ABDCA79AF9DD48A0EA702AD45260B3C03093FB4B" Size="1405792" Version="4.7.3081.0" />
34
</ExePackage>
35
</PackageGroup>
36
</Fragment>
@@ -51,8 +51,8 @@
51
<WixVariable Id="NetFx472RedistPackageDirectory" Value="redist\" Overridable="yes" />
52
53
<PackageGroup Id="$(var.NetFx472RedistId)">
54
- <ExePackage InstallArguments="/q /norestart /log "[NetFx472RedistLog].html"" PerMachine="yes" DetectCondition="!(wix.NetFx472RedistDetectCondition)" InstallCondition="!(wix.NetFx472RedistInstallCondition)" Id="$(var.NetFx472RedistId)" Vital="yes" Permanent="yes" Protocol="netfx4" LogPathVariable="NetFx472RedistLog" Cache="remove">
55
- <ExePackagePayload Name="!(wix.NetFx472RedistPackageDirectory)NDP472-KB4054530-x86-x64-AllOS-ENU.exe" DownloadUrl="$(var.NetFx472RedistLink)" ProductName="Microsoft .NET Framework 4.7.2" Description="Microsoft .NET Framework 4.7.2 Setup" CertificatePublicKey="F49F9B33E25E33CCA0BFB15A62B7C29FFAB3880B" CertificateThumbprint="ABDCA79AF9DD48A0EA702AD45260B3C03093FB4B" Hash="F4EA32D8189DD269FF02D68B39D7DE866AE5F46EEA5A71BF8F4715FB0E4F8B7AC64B274DFA7BFF69B52C719E65256906C8D92FDD355F52C977175AE3E1919098" Size="83940592" Version="4.7.3081.0" />
54
+ <ExePackage CacheId="$(var.NetFx472RedistId)_ABDCA79AF9DD48A0EA702AD45260B3C03093FB4B" InstallArguments="/q /norestart /log "[NetFx472RedistLog].html"" PerMachine="yes" DetectCondition="!(wix.NetFx472RedistDetectCondition)" InstallCondition="!(wix.NetFx472RedistInstallCondition)" Id="$(var.NetFx472RedistId)" Vital="yes" Permanent="yes" Protocol="netfx4" LogPathVariable="NetFx472RedistLog" Cache="remove">
55
+ <ExePackagePayload Name="!(wix.NetFx472RedistPackageDirectory)NDP472-KB4054530-x86-x64-AllOS-ENU.exe" DownloadUrl="$(var.NetFx472RedistLink)" ProductName="Microsoft .NET Framework 4.7.2" Description="Microsoft .NET Framework 4.7.2 Setup" CertificatePublicKey="F49F9B33E25E33CCA0BFB15A62B7C29FFAB3880B" CertificateThumbprint="ABDCA79AF9DD48A0EA702AD45260B3C03093FB4B" Size="83940592" Version="4.7.3081.0" />
56
</ExePackage>
57
</PackageGroup>
58
</Fragment>
src/ext/NetFx/wixlib/NetFx48.wxs
+4
-4
@@ -29,8 +29,8 @@
29
<WixVariable Id="NetFx48WebPackageDirectory" Value="redist\" Overridable="yes" />
30
31
<PackageGroup Id="$(var.NetFx48WebId)">
32
- <ExePackage InstallArguments="/q /norestart /log "[NetFx48WebLog].html"" PerMachine="yes" DetectCondition="!(wix.NetFx48WebDetectCondition)" InstallCondition="!(wix.NetFx48WebInstallCondition)" Id="$(var.NetFx48WebId)" Vital="yes" Permanent="yes" Protocol="netfx4" LogPathVariable="NetFx48WebLog" Cache="remove">
33
- <ExePackagePayload Name="!(wix.NetFx48WebPackageDirectory)ndp48-web.exe" DownloadUrl="$(var.NetFx48WebLink)" ProductName="Microsoft .NET Framework 4.8" Description="Microsoft .NET Framework 4.8 Setup" CertificatePublicKey="F49F9B33E25E33CCA0BFB15A62B7C29FFAB3880B" CertificateThumbprint="ABDCA79AF9DD48A0EA702AD45260B3C03093FB4B" Hash="642721C60D52051C7F3434D8710FE3406A7CFE10B2B39E90EA847719ED1697D7C614F2DF44AD50412B1DF8C98DD78FDC57CA1D047D28C81AC158092E5FB18040" Size="1439328" Version="4.8.4115.0" />
32
+ <ExePackage CacheId="$(var.NetFx48WebId)_ABDCA79AF9DD48A0EA702AD45260B3C03093FB4B" InstallArguments="/q /norestart /log "[NetFx48WebLog].html"" PerMachine="yes" DetectCondition="!(wix.NetFx48WebDetectCondition)" InstallCondition="!(wix.NetFx48WebInstallCondition)" Id="$(var.NetFx48WebId)" Vital="yes" Permanent="yes" Protocol="netfx4" LogPathVariable="NetFx48WebLog" Cache="remove">
33
+ <ExePackagePayload Name="!(wix.NetFx48WebPackageDirectory)ndp48-web.exe" DownloadUrl="$(var.NetFx48WebLink)" ProductName="Microsoft .NET Framework 4.8" Description="Microsoft .NET Framework 4.8 Setup" CertificatePublicKey="F49F9B33E25E33CCA0BFB15A62B7C29FFAB3880B" CertificateThumbprint="ABDCA79AF9DD48A0EA702AD45260B3C03093FB4B" Size="1439328" Version="4.8.4115.0" />
34
</ExePackage>
35
</PackageGroup>
36
</Fragment>
@@ -51,8 +51,8 @@
51
<WixVariable Id="NetFx48RedistPackageDirectory" Value="redist\" Overridable="yes" />
52
53
<PackageGroup Id="$(var.NetFx48RedistId)">
54
- <ExePackage InstallArguments="/q /norestart /log "[NetFx48RedistLog].html"" PerMachine="yes" DetectCondition="!(wix.NetFx48RedistDetectCondition)" InstallCondition="!(wix.NetFx48RedistInstallCondition)" Id="$(var.NetFx48RedistId)" Vital="yes" Permanent="yes" Protocol="netfx4" LogPathVariable="NetFx48RedistLog" Cache="remove">
55
- <ExePackagePayload Name="!(wix.NetFx48RedistPackageDirectory)ndp48-x86-x64-allos-enu.exe" DownloadUrl="$(var.NetFx48RedistLink)" ProductName="Microsoft .NET Framework 4.8" Description="Microsoft .NET Framework 4.8 Setup" CertificatePublicKey="F49F9B33E25E33CCA0BFB15A62B7C29FFAB3880B" CertificateThumbprint="ABDCA79AF9DD48A0EA702AD45260B3C03093FB4B" Hash="FFB6C226AF4E5C8FFA7210D5115701883ABF12A8B1CBAE6E08122FB94DD93763468BFF5B00060EABEF19C147B0A4D8063DDE318D2B928CE397C58F7949736C5F" Size="121307088" Version="4.8.4115.0" />
54
+ <ExePackage CacheId="$(var.NetFx48RedistId)_ABDCA79AF9DD48A0EA702AD45260B3C03093FB4B" InstallArguments="/q /norestart /log "[NetFx48RedistLog].html"" PerMachine="yes" DetectCondition="!(wix.NetFx48RedistDetectCondition)" InstallCondition="!(wix.NetFx48RedistInstallCondition)" Id="$(var.NetFx48RedistId)" Vital="yes" Permanent="yes" Protocol="netfx4" LogPathVariable="NetFx48RedistLog" Cache="remove">
55
+ <ExePackagePayload Name="!(wix.NetFx48RedistPackageDirectory)ndp48-x86-x64-allos-enu.exe" DownloadUrl="$(var.NetFx48RedistLink)" ProductName="Microsoft .NET Framework 4.8" Description="Microsoft .NET Framework 4.8 Setup" CertificatePublicKey="F49F9B33E25E33CCA0BFB15A62B7C29FFAB3880B" CertificateThumbprint="ABDCA79AF9DD48A0EA702AD45260B3C03093FB4B" Size="121307088" Version="4.8.4115.0" />
56
</ExePackage>
57
</PackageGroup>
58
</Fragment>
src/wix/WixToolset.Core.Burn/Bind/BindBundleCommand.cs
+2
-2
@@ -189,7 +189,7 @@ namespace WixToolset.Core.Burn
189
190
case WixBundlePackageType.Exe:
191
{
192
- var command = new ProcessExePackageCommand(facade, payloadSymbols);
192
+ var command = new ProcessExePackageCommand(this.Messaging, facade, payloadSymbols);
193
command.Execute();
194
}
195
break;
@@ -210,7 +210,7 @@ namespace WixToolset.Core.Burn
210
211
case WixBundlePackageType.Msu:
212
{
213
- var command = new ProcessMsuPackageCommand(facade, payloadSymbols);
213
+ var command = new ProcessMsuPackageCommand(this.Messaging, facade, payloadSymbols);
214
command.Execute();
215
}
216
break;
src/wix/WixToolset.Core.Burn/Bundles/CacheIdGenerator.cs
new
+45
@@ -0,0 +1,45 @@
1
+// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
+
3
+namespace WixToolset.Core.Burn.Bundles
4
+{
5
+ using System;
6
+ using WixToolset.Data;
7
+ using WixToolset.Data.Symbols;
8
+ using WixToolset.Extensibility.Services;
9
+
10
+ internal static class CacheIdGenerator
11
+ {
12
+ // These are "reasonable" limits to trim the very long hashes so
13
+ // when used in a cache id we do not overflow MAX_PATH.
14
+ private const int ReasonableCountOfCharsFromCertificateThumbprint = 20;
15
+ private const int ReasonableUpperLimitForCacheId = 64;
16
+
17
+ public static string GenerateCacheIdFromPayloadHashAndThumbprint(WixBundlePayloadSymbol payloadSymbol)
18
+ {
19
+ var takeFromThumbprint = Math.Min(ReasonableCountOfCharsFromCertificateThumbprint, payloadSymbol.CertificateThumbprint.Length);
20
+ var takeFromHash = Math.Min(ReasonableUpperLimitForCacheId - takeFromThumbprint, payloadSymbol.Hash.Length);
21
+
22
+ return payloadSymbol.Hash.Substring(0, takeFromHash) + payloadSymbol.CertificateThumbprint.Substring(0, takeFromThumbprint);
23
+ }
24
+
25
+ public static string GenerateCacheIdFromPackagePayloadHash(IMessaging messaging, WixBundlePayloadSymbol packagePayload, string elementName)
26
+ {
27
+ string cacheId = null;
28
+
29
+ // If we are validating the package via certificate, the CacheId must be specified
30
+ // in source code.
31
+ if (!String.IsNullOrEmpty(packagePayload.CertificatePublicKey) || !String.IsNullOrEmpty(packagePayload.CertificateThumbprint))
32
+ {
33
+ var oneOfCertificateAttributeNames = !String.IsNullOrEmpty(packagePayload.CertificatePublicKey) ? "CertificatePublicKey" : "CertificateThumbprint";
34
+
35
+ messaging.Write(ErrorMessages.ExpectedAttribute(packagePayload.SourceLineNumbers, elementName, "CacheId", oneOfCertificateAttributeNames));
36
+ }
37
+ else // validating package by hashing, so the CacheId can be defaulted to the hash with a "reasonable" upper limit since the CacheId is in the cached file path.
38
+ {
39
+ cacheId = packagePayload.Hash.Length > ReasonableUpperLimitForCacheId ? packagePayload.Hash.Substring(0, ReasonableUpperLimitForCacheId) : packagePayload.Hash;
40
+ }
41
+
42
+ return cacheId;
43
+ }
44
+ }
45
+}
src/wix/WixToolset.Core.Burn/Bundles/ProcessExePackageCommand.cs
+8
-3
@@ -4,19 +4,24 @@ namespace WixToolset.Core.Burn.Bundles
4
{
5
using System;
6
using System.Collections.Generic;
7
+ using WixToolset.Data;
8
using WixToolset.Data.Symbols;
9
+ using WixToolset.Extensibility.Services;
10
11
/// <summary>
12
/// Initializes package state from the Exe contents.
13
/// </summary>
14
internal class ProcessExePackageCommand
15
{
14
- public ProcessExePackageCommand(PackageFacade facade, Dictionary<string, WixBundlePayloadSymbol> payloadSymbols)
16
+ public ProcessExePackageCommand(IMessaging messaging, PackageFacade facade, Dictionary<string, WixBundlePayloadSymbol> payloadSymbols)
17
{
16
- this.AuthoredPayloads = payloadSymbols;
18
+ this.Messaging = messaging;
19
this.Facade = facade;
20
+ this.AuthoredPayloads = payloadSymbols;
21
}
22
23
+ public IMessaging Messaging { get; }
24
+
25
public Dictionary<string, WixBundlePayloadSymbol> AuthoredPayloads { get; }
26
27
public PackageFacade Facade { get; }
@@ -30,7 +35,7 @@ namespace WixToolset.Core.Burn.Bundles
35
36
if (String.IsNullOrEmpty(this.Facade.PackageSymbol.CacheId))
37
{
33
- this.Facade.PackageSymbol.CacheId = packagePayload.Hash;
38
+ this.Facade.PackageSymbol.CacheId = CacheIdGenerator.GenerateCacheIdFromPackagePayloadHash(this.Messaging, packagePayload, "ExePackage");
39
}
40
41
this.Facade.PackageSymbol.Version = packagePayload.Version;
src/wix/WixToolset.Core.Burn/Bundles/ProcessMsuPackageCommand.cs
+7
-3
@@ -6,18 +6,22 @@ namespace WixToolset.Core.Burn.Bundles
6
using System.Collections.Generic;
7
using WixToolset.Data;
8
using WixToolset.Data.Symbols;
9
+ using WixToolset.Extensibility.Services;
10
11
/// <summary>
12
/// Processes the Msu packages to add properties and payloads from the Msu packages.
13
/// </summary>
14
internal class ProcessMsuPackageCommand
15
{
15
- public ProcessMsuPackageCommand(PackageFacade facade, Dictionary<string, WixBundlePayloadSymbol> payloadSymbols)
16
+ public ProcessMsuPackageCommand(IMessaging messaging, PackageFacade facade, Dictionary<string, WixBundlePayloadSymbol> payloadSymbols)
17
{
17
- this.AuthoredPayloads = payloadSymbols;
18
+ this.Messaging = messaging;
19
this.Facade = facade;
20
+ this.AuthoredPayloads = payloadSymbols;
21
}
22
23
+ public IMessaging Messaging { get; }
24
+
25
public Dictionary<string, WixBundlePayloadSymbol> AuthoredPayloads { private get; set; }
26
27
public PackageFacade Facade { private get; set; }
@@ -28,7 +32,7 @@ namespace WixToolset.Core.Burn.Bundles
32
33
if (String.IsNullOrEmpty(this.Facade.PackageSymbol.CacheId))
34
{
31
- this.Facade.PackageSymbol.CacheId = packagePayload.Hash;
35
+ this.Facade.PackageSymbol.CacheId = CacheIdGenerator.GenerateCacheIdFromPackagePayloadHash(this.Messaging, packagePayload, "MsuPackage");
36
}
37
38
this.Facade.PackageSymbol.PerMachine = true; // MSUs are always per-machine.
src/wix/WixToolset.Core.Burn/CommandLine/RemotePayloadSubcommand.cs
+70
-28
@@ -19,6 +19,9 @@ namespace WixToolset.Core.Burn.CommandLine
19
20
internal class RemotePayloadSubcommand : BurnSubcommandBase
21
{
22
+ private static readonly XName BundlePackageName = "BundlePackage";
23
+ private static readonly XName ExePackageName = "ExePackage";
24
+ private static readonly XName MsuPackageName = "MsuPackage";
25
private static readonly XName BundlePackagePayloadName = "BundlePackagePayload";
26
private static readonly XName ExePackagePayloadName = "ExePackagePayload";
27
private static readonly XName MsuPackagePayloadName = "MsuPackagePayload";
@@ -80,7 +83,7 @@ namespace WixToolset.Core.Burn.CommandLine
83
this.IntermediateFolder = Path.GetTempPath();
84
}
85
83
- var elements = this.HarvestRemotePayloads(inputPaths);
86
+ var element = this.HarvestPackageElement(inputPaths);
87
88
if (!this.Messaging.EncounteredError)
89
{
@@ -89,14 +92,11 @@ namespace WixToolset.Core.Burn.CommandLine
92
var outputFolder = Path.GetDirectoryName(this.OutputPath);
93
Directory.CreateDirectory(outputFolder);
94
92
- File.WriteAllLines(this.OutputPath, elements.Select(e => e.ToString()));
95
+ File.WriteAllText(this.OutputPath, element.ToString());
96
}
97
else
98
{
96
- foreach (var element in elements)
97
- {
98
- Console.WriteLine(element);
99
- }
99
+ Console.WriteLine(element.ToString());
100
}
101
}
102
@@ -189,10 +189,51 @@ namespace WixToolset.Core.Burn.CommandLine
189
return result.Distinct(StringComparer.OrdinalIgnoreCase).ToList();
190
}
191
192
- private IEnumerable<XElement> HarvestRemotePayloads(IEnumerable<string> paths)
192
+ private XElement HarvestPackageElement(IEnumerable<string> paths)
193
+ {
194
+ var harvestedFiles = this.HarvestRemotePayloads(paths).ToList();
195
+
196
+ XElement element;
197
+
198
+ switch (harvestedFiles[0].PackageType)
199
+ {
200
+ case WixBundlePackageType.Bundle:
201
+ element = new XElement(BundlePackageName);
202
+ break;
203
+
204
+ case WixBundlePackageType.Exe:
205
+ element = new XElement(ExePackageName);
206
+ break;
207
+
208
+ case WixBundlePackageType.Msu:
209
+ element = new XElement(MsuPackageName);
210
+ break;
211
+
212
+ default:
213
+ return null;
214
+ }
215
+
216
+ var packagePayloadFile = harvestedFiles.FirstOrDefault();
217
+
218
+ if (packagePayloadFile != null)
219
+ {
220
+ if (packagePayloadFile.Element.Attribute("CertificateThumbprint") != null)
221
+ {
222
+ var cacheId = CacheIdGenerator.GenerateCacheIdFromPayloadHashAndThumbprint(packagePayloadFile.PayloadSymbol);
223
+
224
+ element.Add(new XAttribute("CacheId", cacheId));
225
+ }
226
+
227
+ element.Add(harvestedFiles.Select(h => h.Element));
228
+ }
229
+
230
+ return element;
231
+ }
232
+
233
+ private IEnumerable<HarvestedFile> HarvestRemotePayloads(IEnumerable<string> paths)
234
{
235
var first = true;
195
- var hashes = this.GetHashes(paths);
236
+ var hashes = this.GetCertificateHashes(paths);
237
238
foreach (var path in paths)
239
{
@@ -204,22 +245,22 @@ namespace WixToolset.Core.Burn.CommandLine
245
continue;
246
}
247
248
+ yield return harvestedFile;
249
+
250
if (harvestedFile.PackagePayloads.Any())
251
{
209
- var packageHashes = this.GetHashes(harvestedFile.PackagePayloads.Select(x => x.SourceFile.Path));
252
+ var packageCertificateHashes = this.GetCertificateHashes(harvestedFile.PackagePayloads.Select(x => x.SourceFile.Path));
253
254
foreach (var payloadSymbol in harvestedFile.PackagePayloads)
255
{
213
- var harvestedPackageFile = this.HarvestFile(payloadSymbol.SourceFile.Path, false, packageHashes);
214
- yield return harvestedPackageFile.Element;
256
+ var harvestedPackageFile = this.HarvestFile(payloadSymbol.SourceFile.Path, false, packageCertificateHashes);
257
+ yield return harvestedPackageFile;
258
}
259
}
217
-
218
- yield return harvestedFile.Element;
260
}
261
}
262
222
- private Dictionary<string, CertificateHashes> GetHashes(IEnumerable<string> paths)
263
+ private Dictionary<string, CertificateHashes> GetCertificateHashes(IEnumerable<string> paths)
264
{
265
var hashes = new Dictionary<string, CertificateHashes>();
266
@@ -233,7 +274,7 @@ namespace WixToolset.Core.Burn.CommandLine
274
return hashes;
275
}
276
236
- private HarvestedFile HarvestFile(string path, bool isPackage, Dictionary<string, CertificateHashes> hashes)
277
+ private HarvestedFile HarvestFile(string path, bool isPackage, Dictionary<string, CertificateHashes> certificateHashes)
278
{
279
XElement element;
280
WixBundlePackageType? packageType = null;
@@ -274,7 +315,7 @@ namespace WixToolset.Core.Burn.CommandLine
315
var payloadSymbol = new WixBundlePayloadSymbol(null, new Identifier(AccessModifier.Section, "id"))
316
{
317
SourceFile = new IntermediateFieldPathValue { Path = path },
277
- Name = Path.GetFileName(path),
318
+ Name = this.GetRelativeFileName(path),
319
};
320
321
this.PayloadHarvester.HarvestStandardInformation(payloadSymbol);
@@ -293,22 +334,18 @@ namespace WixToolset.Core.Burn.CommandLine
334
335
if (!String.IsNullOrEmpty(this.DownloadUrl))
336
{
296
- var filename = this.GetRelativeFileName(payloadSymbol.SourceFile.Path);
297
- var formattedUrl = String.Format(this.DownloadUrl, filename);
298
-
299
- if (Uri.TryCreate(formattedUrl, UriKind.Absolute, out var url))
300
- {
301
- element.Add(new XAttribute("DownloadUrl", url.AbsoluteUri));
302
- }
337
+ element.Add(new XAttribute("DownloadUrl", this.DownloadUrl));
338
}
339
305
- if (hashes.TryGetValue(path, out var certificateHashes))
340
+ if (certificateHashes.TryGetValue(path, out var certificateHashForPath))
341
{
307
- element.Add(new XAttribute("CertificatePublicKey", certificateHashes.PublicKey));
308
- element.Add(new XAttribute("CertificateThumbprint", certificateHashes.Thumbprint));
309
- }
342
+ payloadSymbol.CertificatePublicKey = certificateHashForPath.PublicKey;
343
+ payloadSymbol.CertificateThumbprint = certificateHashForPath.Thumbprint;
344
311
- if (!String.IsNullOrEmpty(payloadSymbol.Hash))
345
+ element.Add(new XAttribute("CertificatePublicKey", payloadSymbol.CertificatePublicKey));
346
+ element.Add(new XAttribute("CertificateThumbprint", payloadSymbol.CertificateThumbprint));
347
+ }
348
+ else if (!String.IsNullOrEmpty(payloadSymbol.Hash))
349
{
350
element.Add(new XAttribute("Hash", payloadSymbol.Hash));
351
}
@@ -326,6 +363,7 @@ namespace WixToolset.Core.Burn.CommandLine
363
var harvestedFile = new HarvestedFile
364
{
365
Element = element,
366
+ PackageType = packageType,
367
PayloadSymbol = payloadSymbol,
368
};
369
@@ -418,7 +456,11 @@ namespace WixToolset.Core.Burn.CommandLine
456
private class HarvestedFile
457
{
458
public XElement Element { get; set; }
459
+
460
+ public WixBundlePackageType? PackageType { get; internal set; }
461
+
462
public WixBundlePayloadSymbol PayloadSymbol { get; set; }
463
+
464
public List<WixBundlePayloadSymbol> PackagePayloads { get; } = new List<WixBundlePayloadSymbol>();
465
}
466
}
src/wix/WixToolset.Core/Compile/CompilerPayload.cs
+20
-10
@@ -145,18 +145,11 @@ namespace WixToolset.Core
145
this.Core.Write(ErrorMessages.ExpectedAttributeWithoutOtherAttribute(this.SourceLineNumbers, this.Element.Name.LocalName, "Name", "SourceFile"));
146
}
147
148
- if (!this.Size.HasValue)
149
- {
150
- this.Core.Write(ErrorMessages.ExpectedAttributeWithoutOtherAttribute(this.SourceLineNumbers, this.Element.Name.LocalName, "Size", "SourceFile"));
151
- }
152
-
153
- if (String.IsNullOrEmpty(this.Hash))
154
- {
155
- this.Core.Write(ErrorMessages.ExpectedAttributeWithoutOtherAttribute(this.SourceLineNumbers, this.Element.Name.LocalName, "Hash", "SourceFile"));
156
- }
157
-
148
+ // If remote payload is being verified by a certificate.
149
if (!String.IsNullOrEmpty(this.CertificatePublicKey) || !String.IsNullOrEmpty(this.CertificateThumbprint))
150
{
151
+ var oneOfCertificateAttributeNames = !String.IsNullOrEmpty(this.CertificatePublicKey) ? "CertificatePublicKey" : "CertificateThumbprint";
152
+
153
if (String.IsNullOrEmpty(this.CertificateThumbprint))
154
{
155
this.Core.Write(ErrorMessages.ExpectedAttribute(this.SourceLineNumbers, this.Element.Name.LocalName, "CertificateThumbprint", "CertificatePublicKey"));
@@ -165,6 +158,23 @@ namespace WixToolset.Core
158
{
159
this.Core.Write(ErrorMessages.ExpectedAttribute(this.SourceLineNumbers, this.Element.Name.LocalName, "CertificatePublicKey", "CertificateThumbprint"));
160
}
161
+
162
+ if (!String.IsNullOrEmpty(this.Hash))
163
+ {
164
+ this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(this.SourceLineNumbers, this.Element.Name.LocalName, "Hash", oneOfCertificateAttributeNames));
165
+ }
166
+ }
167
+ else // payload is being verified by hash.
168
+ {
169
+ if (String.IsNullOrEmpty(this.Hash))
170
+ {
171
+ this.Core.Write(ErrorMessages.ExpectedAttributeWithoutOtherAttribute(this.SourceLineNumbers, this.Element.Name.LocalName, "Hash", "SourceFile"));
172
+ }
173
+
174
+ if (!this.Size.HasValue)
175
+ {
176
+ this.Core.Write(ErrorMessages.ExpectedAttributeWithoutOtherAttribute(this.SourceLineNumbers, this.Element.Name.LocalName, "Size", "SourceFile"));
177
+ }
178
}
179
180
if (YesNoDefaultType.Yes == this.Compressed)
src/wix/test/WixToolsetTest.CoreIntegration/ExePackageFixture.cs
+27
@@ -443,5 +443,32 @@ namespace WixToolsetTest.CoreIntegration
443
Assert.Equal(401, result.ExitCode);
444
}
445
}
446
+
447
+ [Fact]
448
+ public void CannotBuildBundleWithExePackageUsingCertificateVerificationWithoutCacheId()
449
+ {
450
+ var dotDatafolder = TestData.Get(@"TestData", ".Data");
451
+ var folder = TestData.Get(@"TestData", "ExePackage");
452
+
453
+ using (var fs = new DisposableFileSystem())
454
+ {
455
+ var baseFolder = fs.GetFolder();
456
+ var intermediateFolder = Path.Combine(baseFolder, "obj");
457
+
458
+ var result = WixRunner.Execute(new[]
459
+ {
460
+ "build",
461
+ Path.Combine(folder, "UseCertificateVerificationWithoutCacheId.wxs"),
462
+ "-bindpath", Path.Combine(folder, "data"),
463
+ "-bindpath", dotDatafolder,
464
+ "-intermediateFolder", intermediateFolder,
465
+ "-o", Path.Combine(baseFolder, "bin", "test.exe")
466
+ });
467
+
468
+ Assert.Equal(10, result.ExitCode);
469
+ var message = result.Messages.Single();
470
+ Assert.Equal("The ExePackage/@CacheId attribute was not found; it is required when attribute CertificatePublicKey is specified.", message.ToString());
471
+ }
472
+ }
473
}
474
}
src/wix/test/WixToolsetTest.CoreIntegration/MsuPackageFixture.cs
+56
@@ -3,6 +3,7 @@
3
namespace WixToolsetTest.CoreIntegration
4
{
5
using System.IO;
6
+ using System.Linq;
7
using WixBuildTools.TestSupport;
8
using WixToolset.Core.TestPackage;
9
using Xunit;
@@ -12,6 +13,7 @@ namespace WixToolsetTest.CoreIntegration
13
[Fact]
14
public void CanBuildBundleWithMsuPackage()
15
{
16
+ var dotDatafolder = TestData.Get(@"TestData", ".Data");
17
var folder = TestData.Get(@"TestData", "MsuPackage");
18
19
using (var fs = new DisposableFileSystem())
@@ -24,6 +26,7 @@ namespace WixToolsetTest.CoreIntegration
26
"build",
27
Path.Combine(folder, "Bundle.wxs"),
28
"-bindpath", Path.Combine(folder, "data"),
29
+ "-bindpath", dotDatafolder,
30
"-intermediateFolder", intermediateFolder,
31
"-o", Path.Combine(baseFolder, "bin", "test.exe")
32
});
@@ -32,5 +35,58 @@ namespace WixToolsetTest.CoreIntegration
35
Assert.True(File.Exists(Path.Combine(baseFolder, "bin", "test.exe")));
36
}
37
}
38
+
39
+ [Fact]
40
+ public void CanBuildBundleWithMsuPackageUsingCertificateVerification()
41
+ {
42
+ var dotDatafolder = TestData.Get(@"TestData", ".Data");
43
+ var folder = TestData.Get(@"TestData", "MsuPackage");
44
+
45
+ using (var fs = new DisposableFileSystem())
46
+ {
47
+ var baseFolder = fs.GetFolder();
48
+ var intermediateFolder = Path.Combine(baseFolder, "obj");
49
+
50
+ var result = WixRunner.Execute(new[]
51
+ {
52
+ "build",
53
+ Path.Combine(folder, "BundleUsingCertificateVerification.wxs"),
54
+ "-bindpath", Path.Combine(folder, "data"),
55
+ "-bindpath", dotDatafolder,
56
+ "-intermediateFolder", intermediateFolder,
57
+ "-o", Path.Combine(baseFolder, "bin", "test.exe")
58
+ });
59
+
60
+ result.AssertSuccess();
61
+ Assert.True(File.Exists(Path.Combine(baseFolder, "bin", "test.exe")));
62
+ }
63
+ }
64
+
65
+ [Fact]
66
+ public void CannotBuildBundleWithMsuPackageUsingCertificateVerificationWithoutCacheId()
67
+ {
68
+ var dotDatafolder = TestData.Get(@"TestData", ".Data");
69
+ var folder = TestData.Get(@"TestData", "MsuPackage");
70
+
71
+ using (var fs = new DisposableFileSystem())
72
+ {
73
+ var baseFolder = fs.GetFolder();
74
+ var intermediateFolder = Path.Combine(baseFolder, "obj");
75
+
76
+ var result = WixRunner.Execute(new[]
77
+ {
78
+ "build",
79
+ Path.Combine(folder, "BundleUsingCertificateVerificationWithoutCacheId.wxs"),
80
+ "-bindpath", Path.Combine(folder, "data"),
81
+ "-bindpath", dotDatafolder,
82
+ "-intermediateFolder", intermediateFolder,
83
+ "-o", Path.Combine(baseFolder, "bin", "test.exe")
84
+ });
85
+
86
+ Assert.Equal(10, result.ExitCode);
87
+ var message = result.Messages.Single();
88
+ Assert.Equal("The MsuPackage/@CacheId attribute was not found; it is required when attribute CertificatePublicKey is specified.", message.ToString());
89
+ }
90
+ }
91
}
92
}
src/wix/test/WixToolsetTest.CoreIntegration/PackagePayloadFixture.cs
+2
-1
@@ -336,8 +336,9 @@ namespace WixToolsetTest.CoreIntegration
336
WixAssert.CompareLineByLine(new[]
337
{
338
"The ExePackagePayload/@CertificatePublicKey attribute was not found; it is required when attribute CertificateThumbprint is specified.",
339
+ "The ExePackagePayload/@Hash attribute cannot be specified when attribute CertificateThumbprint is present."
340
}, result.Messages.Select(m => m.ToString()).ToArray());
340
- Assert.Equal(10, result.ExitCode);
341
+ Assert.Equal(35, result.ExitCode);
342
}
343
}
344
src/wix/test/WixToolsetTest.CoreIntegration/RemotePayloadFixture.cs
+137
-22
@@ -2,6 +2,7 @@
2
3
namespace WixToolsetTest.CoreIntegration
4
{
5
+ using System;
6
using System.Collections.Generic;
7
using System.IO;
8
using System.Linq;
@@ -59,9 +60,11 @@ namespace WixToolsetTest.CoreIntegration
60
};
61
WixAssert.StringEqual(
62
"<root>" +
63
+ "<BundlePackage>" +
64
"<BundlePackagePayload Name='test.exe' ProductName='DiversePayloadsBundle' Description='DiversePayloadsBundle' Hash='*' Size='*' Version='1.0.0.0'>" +
65
"<RemoteBundle BundleId='*' DisplayName='DiversePayloadsBundle' EngineVersion='*' InstallSize='3790116' ManifestNamespace='http://wixtoolset.org/schemas/v4/2008/Burn' PerMachine='yes' ProviderKey='*' ProtocolVersion='1' Version='1.0.0.0' Win64='no' UpgradeCode='{FEF1D2B8-4737-4A2A-9F91-77F7294FB55B}' />" +
66
"</BundlePackagePayload>" +
67
+ "</BundlePackage>" +
68
"</root>", xml.GetFragmentTestXml(ignoreAttributesByElementName));
69
70
// ExternalWithoutDownloadUrl
@@ -81,13 +84,15 @@ namespace WixToolsetTest.CoreIntegration
84
xml = File.ReadAllText(externalWithoutDownloadUrlOutFile);
85
WixAssert.StringEqual(
86
"<root>" +
87
+ "<BundlePackage>" +
88
+ "<BundlePackagePayload Name='test.exe' ProductName='DiversePayloadsBundle' Description='DiversePayloadsBundle' Hash='*' Size='*' Version='1.0.0.0'>" +
89
+ "<RemoteBundle BundleId='*' DisplayName='DiversePayloadsBundle' EngineVersion='*' InstallSize='3790116' ManifestNamespace='http://wixtoolset.org/schemas/v4/2008/Burn' PerMachine='yes' ProviderKey='*' ProtocolVersion='1' Version='1.0.0.0' Win64='no' UpgradeCode='{FEF1D2B8-4737-4A2A-9F91-77F7294FB55B}' />" +
90
+ "</BundlePackagePayload>" +
91
"<Payload Name='External.cab' Hash='*' Size='*' />" +
92
"<Payload Name='test.msi' Hash='*' Size='*' />" +
93
"<Payload Name='test.txt' Hash='*' Size='*' />" +
94
"<Payload Name='Shared.dll' Hash='*' Size='*' />" +
88
- "<BundlePackagePayload Name='test.exe' ProductName='DiversePayloadsBundle' Description='DiversePayloadsBundle' Hash='*' Size='*' Version='1.0.0.0'>" +
89
- "<RemoteBundle BundleId='*' DisplayName='DiversePayloadsBundle' EngineVersion='*' InstallSize='3790116' ManifestNamespace='http://wixtoolset.org/schemas/v4/2008/Burn' PerMachine='yes' ProviderKey='*' ProtocolVersion='1' Version='1.0.0.0' Win64='no' UpgradeCode='{FEF1D2B8-4737-4A2A-9F91-77F7294FB55B}' />" +
90
- "</BundlePackagePayload>" +
95
+ "</BundlePackage>" +
96
"</root>", xml.GetFragmentTestXml(ignoreAttributesByElementName));
97
98
// External
@@ -107,14 +112,16 @@ namespace WixToolsetTest.CoreIntegration
112
xml = File.ReadAllText(externalOutFile);
113
WixAssert.StringEqual(
114
"<root>" +
115
+ "<BundlePackage>" +
116
+ "<BundlePackagePayload Name='test.exe' ProductName='DiversePayloadsBundle' Description='DiversePayloadsBundle' Hash='*' Size='*' Version='1.0.0.0'>" +
117
+ "<RemoteBundle BundleId='*' DisplayName='DiversePayloadsBundle' EngineVersion='*' InstallSize='3790116' ManifestNamespace='http://wixtoolset.org/schemas/v4/2008/Burn' PerMachine='yes' ProviderKey='*' ProtocolVersion='1' Version='1.0.0.0' Win64='no' UpgradeCode='{FEF1D2B8-4737-4A2A-9F91-77F7294FB55B}' />" +
118
+ "</BundlePackagePayload>" +
119
"<Payload Name='External.cab' Hash='*' Size='*' />" +
120
"<Payload Name='Windows8.1-KB2937592-x86.msu' Hash='*' Size='*' />" +
121
"<Payload Name='test.msi' Hash='*' Size='*' />" +
122
"<Payload Name='test.txt' Hash='*' Size='*' />" +
123
"<Payload Name='Shared.dll' Hash='*' Size='*' />" +
115
- "<BundlePackagePayload Name='test.exe' ProductName='DiversePayloadsBundle' Description='DiversePayloadsBundle' Hash='*' Size='*' Version='1.0.0.0'>" +
116
- "<RemoteBundle BundleId='*' DisplayName='DiversePayloadsBundle' EngineVersion='*' InstallSize='3790116' ManifestNamespace='http://wixtoolset.org/schemas/v4/2008/Burn' PerMachine='yes' ProviderKey='*' ProtocolVersion='1' Version='1.0.0.0' Win64='no' UpgradeCode='{FEF1D2B8-4737-4A2A-9F91-77F7294FB55B}' />" +
117
- "</BundlePackagePayload>" +
124
+ "</BundlePackage>" +
125
"</root>", xml.GetFragmentTestXml(ignoreAttributesByElementName));
126
127
// All
@@ -134,15 +141,17 @@ namespace WixToolsetTest.CoreIntegration
141
xml = File.ReadAllText(allOutFile);
142
WixAssert.StringEqual(
143
"<root>" +
144
+ "<BundlePackage>" +
145
+ "<BundlePackagePayload Name='test.exe' ProductName='DiversePayloadsBundle' Description='DiversePayloadsBundle' Hash='*' Size='*' Version='1.0.0.0'>" +
146
+ "<RemoteBundle BundleId='*' DisplayName='DiversePayloadsBundle' EngineVersion='*' InstallSize='3790116' ManifestNamespace='http://wixtoolset.org/schemas/v4/2008/Burn' PerMachine='yes' ProviderKey='*' ProtocolVersion='1' Version='1.0.0.0' Win64='no' UpgradeCode='{FEF1D2B8-4737-4A2A-9F91-77F7294FB55B}' />" +
147
+ "</BundlePackagePayload>" +
148
"<Payload Name='External.cab' Hash='*' Size='*' />" +
149
"<Payload Name='signed_bundle_engine.exe' ProductName='~TestBundle' Description='~TestBundle' Hash='*' Size='*' Version='1.0.0.0' />" +
150
"<Payload Name='Windows8.1-KB2937592-x86.msu' Hash='*' Size='*' />" +
151
"<Payload Name='test.msi' Hash='*' Size='*' />" +
152
"<Payload Name='test.txt' Hash='*' Size='*' />" +
153
"<Payload Name='Shared.dll' Hash='*' Size='*' />" +
143
- "<BundlePackagePayload Name='test.exe' ProductName='DiversePayloadsBundle' Description='DiversePayloadsBundle' Hash='*' Size='*' Version='1.0.0.0'>" +
144
- "<RemoteBundle BundleId='*' DisplayName='DiversePayloadsBundle' EngineVersion='*' InstallSize='3790116' ManifestNamespace='http://wixtoolset.org/schemas/v4/2008/Burn' PerMachine='yes' ProviderKey='*' ProtocolVersion='1' Version='1.0.0.0' Win64='no' UpgradeCode='{FEF1D2B8-4737-4A2A-9F91-77F7294FB55B}' />" +
145
- "</BundlePackagePayload>" +
154
+ "</BundlePackage>" +
155
"</root>", xml.GetFragmentTestXml(ignoreAttributesByElementName));
156
}
157
}
@@ -173,9 +182,11 @@ namespace WixToolsetTest.CoreIntegration
182
183
WixAssert.CompareLineByLine(new[]
184
{
176
- "<BundlePackagePayload Name='v3bundle.exe' ProductName='CustomV3Theme' Description='CustomV3Theme' DownloadUrl='https://www.example.com/files/v3bundle.exe' Hash='80739E7B8C31D75B4CDC48D60D74F5E481CB904212A3AE3FB0920365A163FBF32B0C5C175AB516D4124F107923E96200605DE1D560D362FEB47350FA727823B4' Size='648397' Version='1.0.0.0'>",
177
- " <RemoteBundle BundleId='{215A70DB-AB35-48C7-BE51-D66EAAC87177}' DisplayName='CustomV3Theme' InstallSize='1135' ManifestNamespace='http://schemas.microsoft.com/wix/2008/Burn' PerMachine='yes' ProviderKey='{215a70db-ab35-48c7-be51-d66eaac87177}' ProtocolVersion='1' Version='1.0.0.0' Win64='no' UpgradeCode='{2BF4C01F-C132-4E70-97AB-2BC68C7CCD10}' />",
178
- "</BundlePackagePayload>",
185
+ "<BundlePackage>",
186
+ " <BundlePackagePayload Name='v3bundle.exe' ProductName='CustomV3Theme' Description='CustomV3Theme' DownloadUrl='https://www.example.com/files/{0}' Hash='80739E7B8C31D75B4CDC48D60D74F5E481CB904212A3AE3FB0920365A163FBF32B0C5C175AB516D4124F107923E96200605DE1D560D362FEB47350FA727823B4' Size='648397' Version='1.0.0.0'>",
187
+ " <RemoteBundle BundleId='{215A70DB-AB35-48C7-BE51-D66EAAC87177}' DisplayName='CustomV3Theme' InstallSize='1135' ManifestNamespace='http://schemas.microsoft.com/wix/2008/Burn' PerMachine='yes' ProviderKey='{215a70db-ab35-48c7-be51-d66eaac87177}' ProtocolVersion='1' Version='1.0.0.0' Win64='no' UpgradeCode='{2BF4C01F-C132-4E70-97AB-2BC68C7CCD10}' />",
188
+ " </BundlePackagePayload>",
189
+ "</BundlePackage>",
190
}, elements);
191
}
192
}
@@ -205,7 +216,9 @@ namespace WixToolsetTest.CoreIntegration
216
217
WixAssert.CompareLineByLine(new[]
218
{
208
- @"<ExePackagePayload Name='burn.exe' ProductName='Windows Installer XML Toolset' Description='WiX Toolset Bootstrapper' DownloadUrl='https://www.example.com/files/burn.exe' Hash='F6E722518AC3AB7E31C70099368D5770788C179AA23226110DCF07319B1E1964E246A1E8AE72E2CF23E0138AFC281BAFDE45969204405E114EB20C8195DA7E5E' Size='463360' Version='3.14.0.1703' />",
219
+ @"<ExePackage>",
220
+ @" <ExePackagePayload Name='burn.exe' ProductName='Windows Installer XML Toolset' Description='WiX Toolset Bootstrapper' DownloadUrl='https://www.example.com/files/{0}' Hash='F6E722518AC3AB7E31C70099368D5770788C179AA23226110DCF07319B1E1964E246A1E8AE72E2CF23E0138AFC281BAFDE45969204405E114EB20C8195DA7E5E' Size='463360' Version='3.14.0.1703' />",
221
+ @"</ExePackage>",
222
}, elements);
223
}
224
}
@@ -234,12 +247,76 @@ namespace WixToolsetTest.CoreIntegration
247
248
WixAssert.CompareLineByLine(new[]
249
{
237
- @"<MsuPackagePayload Name='Windows8.1-KB2937592-x86.msu' Hash='904ADEA6AB675ACE16483138BF3F5850FD56ACB6E3A13AFA7263ED49C68CCE6CF84D6AAD6F99AAF175A95EE1A56C787C5AD968019056490B1073E7DBB7B9B7BE' Size='309544' />",
250
+ @"<MsuPackage>",
251
+ @" <MsuPackagePayload Name='Windows8.1-KB2937592-x86.msu' Hash='904ADEA6AB675ACE16483138BF3F5850FD56ACB6E3A13AFA7263ED49C68CCE6CF84D6AAD6F99AAF175A95EE1A56C787C5AD968019056490B1073E7DBB7B9B7BE' Size='309544' />",
252
+ @"</MsuPackage>"
253
}, elements);
254
}
255
}
256
257
[Fact]
258
+ public void CanGetRemoteMsuPayloadWithCertificate()
259
+ {
260
+ var folder = TestData.Get(@"TestData");
261
+
262
+ using (var fs = new DisposableFileSystem())
263
+ {
264
+ var outputFolder = fs.GetFolder();
265
+ var outFile = Path.Combine(outputFolder, "out.xml");
266
+ var remotePayloadSourceFile = Path.Combine(outputFolder, "remotePayload.wxs");
267
+ var intermediateFolder = Path.Combine(outputFolder, "obj");
268
+ var bundleFile = Path.Combine(intermediateFolder, "out.exe");
269
+
270
+ var result = WixRunner.Execute(new[]
271
+ {
272
+ "burn", "remotepayload",
273
+ "-usecertificate",
274
+ "-downloadUrl", "http://wixtoolset.org/{0}",
275
+ Path.Combine(folder, ".Data", "Windows8.1-KB2937592-x86.msu"),
276
+ "-o", outFile
277
+ });
278
+
279
+ result.AssertSuccess();
280
+
281
+ var elements = File.ReadAllLines(outFile);
282
+ elements = elements.Select(s => s.Replace("\"", "'")).ToArray();
283
+
284
+ WixAssert.CompareLineByLine(new[]
285
+ {
286
+ @"<MsuPackage CacheId='904ADEA6AB675ACE16483138BF3F5850FD56ACB6E3A1108E2BA23632620C427C'>",
287
+ @" <MsuPackagePayload Name='Windows8.1-KB2937592-x86.msu' DownloadUrl='http://wixtoolset.org/{0}' CertificatePublicKey='A260A870BE1145ED71E2BB5AA19463A4FE9DCC41' CertificateThumbprint='108E2BA23632620C427C570B6D9DB51AC31387FE' Size='309544' />",
288
+ @"</MsuPackage>"
289
+ }, elements);
290
+
291
+ // Append required attributes to build.
292
+ elements[0] = elements[0].Replace(">", " KB='KB2937592' DetectCondition='test'>");
293
+
294
+ var remotePayloadSourceText = "<Wix xmlns='http://wixtoolset.org/schemas/v4/wxs'>" +
295
+ " <Fragment>" +
296
+ " <PackageGroup Id='BundlePackages'>" +
297
+ String.Join(Environment.NewLine, elements) +
298
+ " </PackageGroup>" +
299
+ " </Fragment>" +
300
+ "</Wix>";
301
+
302
+ File.WriteAllText(remotePayloadSourceFile, remotePayloadSourceText);
303
+
304
+ result = WixRunner.Execute(new[]
305
+ {
306
+ "build",
307
+ Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"),
308
+ remotePayloadSourceFile,
309
+ "-bindpath", Path.Combine(folder, "SimpleBundle", "data"),
310
+ "-bindpath", Path.Combine(folder, ".Data"),
311
+ "-intermediateFolder", intermediateFolder,
312
+ "-o", bundleFile
313
+ });
314
+
315
+ result.AssertSuccess();
316
+ }
317
+ }
318
+
319
+ [Fact(Skip = "Blocked by https://github.com/wixtoolset/issues/issues/5601 - Support RemotePayload for Payload elements")]
320
public void CanGetRemotePayloadWithCertificate()
321
{
322
var folder = TestData.Get(@"TestData");
@@ -248,11 +325,15 @@ namespace WixToolsetTest.CoreIntegration
325
{
326
var outputFolder = fs.GetFolder();
327
var outFile = Path.Combine(outputFolder, "out.xml");
328
+ var remotePayloadSourceFile = Path.Combine(outputFolder, "remotePayload.wxs");
329
+ var intermediateFolder = Path.Combine(outputFolder, "obj");
330
+ var bundleFile = Path.Combine(intermediateFolder, "out.exe");
331
332
var result = WixRunner.Execute(new[]
333
{
334
"burn", "remotepayload",
335
"-usecertificate",
336
+ "-downloadUrl", "http://wixtoolset.org/{0}",
337
Path.Combine(folder, ".Data", "burn.exe"),
338
Path.Combine(folder, ".Data", "signed_cab1.cab"),
339
"-o", outFile
@@ -265,9 +346,38 @@ namespace WixToolsetTest.CoreIntegration
346
347
WixAssert.CompareLineByLine(new[]
348
{
268
- @"<ExePackagePayload Name='burn.exe' ProductName='Windows Installer XML Toolset' Description='WiX Toolset Bootstrapper' Hash='F6E722518AC3AB7E31C70099368D5770788C179AA23226110DCF07319B1E1964E246A1E8AE72E2CF23E0138AFC281BAFDE45969204405E114EB20C8195DA7E5E' Size='463360' Version='3.14.0.1703' />",
269
- @"<Payload Name='signed_cab1.cab' CertificatePublicKey='BBD1B48A37503767C71F455624967D406A5D66C3' CertificateThumbprint='DE13B4CE635E3F63AA2394E66F95C460267BC82F' Hash='D8D3842403710E1F6036A62543224855CADF546853933C2B17BA99D789D4347B36717687C022678A9D3DE749DFC1482DAAB92B997B62BB32A8A6828B9D04C414' Size='1585' />",
349
+ @"<ExePackage>",
350
+ @" <ExePackagePayload Name='burn.exe' ProductName='Windows Installer XML Toolset' Description='WiX Toolset Bootstrapper' DownloadUrl='http://wixtoolset.org/{0}' Hash='F6E722518AC3AB7E31C70099368D5770788C179AA23226110DCF07319B1E1964E246A1E8AE72E2CF23E0138AFC281BAFDE45969204405E114EB20C8195DA7E5E' Size='463360' Version='3.14.0.1703' />",
351
+ @" <Payload Name='signed_cab1.cab' DownloadUrl='http://wixtoolset.org/{0}' CertificatePublicKey='BBD1B48A37503767C71F455624967D406A5D66C3' CertificateThumbprint='DE13B4CE635E3F63AA2394E66F95C460267BC82F' Size='1585' />",
352
+ @"</ExePackage>",
353
}, elements);
354
+
355
+ elements[0] = elements[0].Replace(">", " Permanent='yes' DetectCondition='test'>");
356
+
357
+ var remotePayloadSourceText = "<Wix xmlns='http://wixtoolset.org/schemas/v4/wxs'>" +
358
+ " <Fragment>" +
359
+ " <PackageGroup Id='BundlePackages'>" +
360
+ " <ExePackage CacheId='xyz'>" +
361
+ String.Join(Environment.NewLine, elements) +
362
+ " </ExePackage>" +
363
+ " </PackageGroup>" +
364
+ " </Fragment>" +
365
+ "</Wix>";
366
+
367
+ File.WriteAllText(remotePayloadSourceFile, remotePayloadSourceText);
368
+
369
+ result = WixRunner.Execute(new[]
370
+ {
371
+ "build",
372
+ Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"),
373
+ remotePayloadSourceFile,
374
+ "-bindpath", Path.Combine(folder, "SimpleBundle", "data"),
375
+ "-bindpath", Path.Combine(folder, ".Data"),
376
+ "-intermediateFolder", intermediateFolder,
377
+ "-o", bundleFile
378
+ });
379
+
380
+ result.AssertSuccess();
381
}
382
}
383
@@ -296,8 +406,10 @@ namespace WixToolsetTest.CoreIntegration
406
407
WixAssert.CompareLineByLine(new[]
408
{
299
- @"<ExePackagePayload Name='burn.exe' ProductName='Windows Installer XML Toolset' Description='WiX Toolset Bootstrapper' Hash='F6E722518AC3AB7E31C70099368D5770788C179AA23226110DCF07319B1E1964E246A1E8AE72E2CF23E0138AFC281BAFDE45969204405E114EB20C8195DA7E5E' Size='463360' Version='3.14.0.1703' />",
300
- @"<Payload Name='signed_cab1.cab' Hash='D8D3842403710E1F6036A62543224855CADF546853933C2B17BA99D789D4347B36717687C022678A9D3DE749DFC1482DAAB92B997B62BB32A8A6828B9D04C414' Size='1585' />",
409
+ @"<ExePackage>",
410
+ @" <ExePackagePayload Name='burn.exe' ProductName='Windows Installer XML Toolset' Description='WiX Toolset Bootstrapper' Hash='F6E722518AC3AB7E31C70099368D5770788C179AA23226110DCF07319B1E1964E246A1E8AE72E2CF23E0138AFC281BAFDE45969204405E114EB20C8195DA7E5E' Size='463360' Version='3.14.0.1703' />",
411
+ @" <Payload Name='signed_cab1.cab' Hash='D8D3842403710E1F6036A62543224855CADF546853933C2B17BA99D789D4347B36717687C022678A9D3DE749DFC1482DAAB92B997B62BB32A8A6828B9D04C414' Size='1585' />",
412
+ @"</ExePackage>",
413
}, elements);
414
}
415
}
@@ -319,6 +431,7 @@ namespace WixToolsetTest.CoreIntegration
431
"-du", "https://www.example.com/files/{0}",
432
Path.Combine(folder, ".Data", "burn.exe"),
433
Path.Combine(folder, "RemotePayload", "recurse", "*"),
434
+ "-basepath", Path.Combine(folder, "RemotePayload", "recurse"),
435
"-basepath", folder,
436
"-bp", Path.Combine(folder, ".Data"),
437
"-o", outFile
@@ -331,10 +444,12 @@ namespace WixToolsetTest.CoreIntegration
444
445
WixAssert.CompareLineByLine(new[]
446
{
334
- @"<ExePackagePayload Name='burn.exe' ProductName='Windows Installer XML Toolset' Description='WiX Toolset Bootstrapper' DownloadUrl='https://www.example.com/files/burn.exe' Hash='F6E722518AC3AB7E31C70099368D5770788C179AA23226110DCF07319B1E1964E246A1E8AE72E2CF23E0138AFC281BAFDE45969204405E114EB20C8195DA7E5E' Size='463360' Version='3.14.0.1703' />",
335
- @"<Payload Name='a.dat' DownloadUrl='https://www.example.com/files/RemotePayload/recurse/a.dat' Hash='D13926E5CBE5ED8B46133F9199FAF2FF25B25981C67A31AE2BC3F6C20390FACBFADCD89BD22D3445D95B989C8EACFB1E68DB634BECB5C9624865BA453BCE362A' Size='16' />",
336
- @"<Payload Name='b.dat' DownloadUrl='https://www.example.com/files/RemotePayload/recurse/subfolder/b.dat' Hash='5F94707BC29ADFE3B9615E6753388707FD0B8F5FD9EEEC2B17E21E72F1635FF7D7A101E7D14F614E111F263CB9AC4D0940BE1247881A7844F226D6C400293D8E' Size='37' />",
337
- @"<Payload Name='c.dat' DownloadUrl='https://www.example.com/files/RemotePayload/recurse/subfolder/c.dat' Hash='97D6209A5571E05E4F72F9C6BF0987651FA03E63F971F9B53C2B3D798A666D9864F232D4E2D6442E47D9D72B282309B6EEFF4EE017B43B706FA92A0F5EF74734' Size='42' />",
447
+ @"<ExePackage>",
448
+ @" <ExePackagePayload Name='burn.exe' ProductName='Windows Installer XML Toolset' Description='WiX Toolset Bootstrapper' DownloadUrl='https://www.example.com/files/{0}' Hash='F6E722518AC3AB7E31C70099368D5770788C179AA23226110DCF07319B1E1964E246A1E8AE72E2CF23E0138AFC281BAFDE45969204405E114EB20C8195DA7E5E' Size='463360' Version='3.14.0.1703' />",
449
+ @" <Payload Name='a.dat' DownloadUrl='https://www.example.com/files/{0}' Hash='D13926E5CBE5ED8B46133F9199FAF2FF25B25981C67A31AE2BC3F6C20390FACBFADCD89BD22D3445D95B989C8EACFB1E68DB634BECB5C9624865BA453BCE362A' Size='16' />",
450
+ @" <Payload Name='subfolder\b.dat' DownloadUrl='https://www.example.com/files/{0}' Hash='5F94707BC29ADFE3B9615E6753388707FD0B8F5FD9EEEC2B17E21E72F1635FF7D7A101E7D14F614E111F263CB9AC4D0940BE1247881A7844F226D6C400293D8E' Size='37' />",
451
+ @" <Payload Name='subfolder\c.dat' DownloadUrl='https://www.example.com/files/{0}' Hash='97D6209A5571E05E4F72F9C6BF0987651FA03E63F971F9B53C2B3D798A666D9864F232D4E2D6442E47D9D72B282309B6EEFF4EE017B43B706FA92A0F5EF74734' Size='42' />",
452
+ @"</ExePackage>"
453
}, elements);
454
}
455
}
src/wix/test/WixToolsetTest.CoreIntegration/TestData/.Data/fakeba.dll
renamed
src/wix/test/WixToolsetTest.CoreIntegration/TestData/ExePackage/UseCertificateVerificationWithoutCacheId.wxs
new
+13
@@ -0,0 +1,13 @@
1
+<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
2
+ <Bundle Name="BurnBundle" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="B94478B1-E1F3-4700-9CE8-6AA090854AEC">
3
+ <BootstrapperApplication>
4
+ <BootstrapperApplicationDll SourceFile="fakeba.dll" />
5
+ </BootstrapperApplication>
6
+
7
+ <Chain>
8
+ <ExePackage DetectCondition="DetectedTheMsu" UninstallArguments="-uninstall">
9
+ <ExePackagePayload Name='foo.exe' DownloadUrl='http://wixtoolset.org' CertificatePublicKey="abc" CertificateThumbprint="123" Size='10' />
10
+ </ExePackage>
11
+ </Chain>
12
+ </Bundle>
13
+</Wix>
src/wix/test/WixToolsetTest.CoreIntegration/TestData/MsuPackage/BundleUsingCertificateVerification.wxs
new
+13
@@ -0,0 +1,13 @@
1
+<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
2
+ <Bundle Name="BurnBundle" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="B94478B1-E1F3-4700-9CE8-6AA090854AEC">
3
+ <BootstrapperApplication>
4
+ <BootstrapperApplicationDll SourceFile="fakeba.dll" />
5
+ </BootstrapperApplication>
6
+
7
+ <Chain>
8
+ <MsuPackage DetectCondition="DetectedTheMsu" KB="xyz" CacheId="8cf75b99-13c0-4184-82ce-dbde45dcd55a">
9
+ <MsuPackagePayload Name='Windows8.1-KB2937592-x86.msu' DownloadUrl='http://wixtoolset.org' CertificatePublicKey="abc" CertificateThumbprint="123" Size='309544' />
10
+ </MsuPackage>
11
+ </Chain>
12
+ </Bundle>
13
+</Wix>
src/wix/test/WixToolsetTest.CoreIntegration/TestData/MsuPackage/BundleUsingCertificateVerificationWithoutCacheId.wxs
new
+13
@@ -0,0 +1,13 @@
1
+<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
2
+ <Bundle Name="BurnBundle" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="B94478B1-E1F3-4700-9CE8-6AA090854AEC">
3
+ <BootstrapperApplication>
4
+ <BootstrapperApplicationDll SourceFile="fakeba.dll" />
5
+ </BootstrapperApplication>
6
+
7
+ <Chain>
8
+ <MsuPackage DetectCondition="DetectedTheMsu" KB="xyz" >
9
+ <MsuPackagePayload Name='Windows8.1-KB2937592-x86.msu' DownloadUrl='http://wixtoolset.org' CertificatePublicKey="abc" CertificateThumbprint="123" Size='309544' />
10
+ </MsuPackage>
11
+ </Chain>
12
+ </Bundle>
13
+</Wix>
src/wix/test/WixToolsetTest.CoreIntegration/TestData/PackagePayload/SpecifiedCertificate.wxs
+1
-1
@@ -3,7 +3,7 @@
3
<Fragment>
4
<PackageGroup Id="BundlePackages">
5
<ExePackage Id="SpecifiedSourceFileAndHash" Permanent="yes" DetectCondition="none">
6
- <ExePackagePayload CertificatePublicKey="abcd" CertificateThumbprint="abcd" Hash="1234" DownloadUrl="https://example.com/" Name="fake.exe" Size="100" />
6
+ <ExePackagePayload CertificatePublicKey="abcd" CertificateThumbprint="abcd" DownloadUrl="https://example.com/" Name="fake.exe" Size="100" />
7
</ExePackage>
8
</PackageGroup>
9
</Fragment>
src/wix/test/WixToolsetTest.CoreIntegration/TestData/PackagePayload/SpecifiedCertificatePublicKeyWithoutThumbprint.wxs
+1
-1
@@ -3,7 +3,7 @@
3
<Fragment>
4
<PackageGroup Id="BundlePackages">
5
<ExePackage Id="SpecifiedSourceFileAndHash" Permanent="yes" DetectCondition="none">
6
- <ExePackagePayload CertificatePublicKey="abcd" Hash="123" DownloadUrl="https://example.com/" Name="fake.exe" Size="100" />
6
+ <ExePackagePayload CertificatePublicKey="abcd" DownloadUrl="https://example.com/" Name="fake.exe" Size="100" />
7
</ExePackage>
8
</PackageGroup>
9
</Fragment>