mirror of
				https://github.com/velopack/velopack.git
				synced 2025-10-25 15:19:22 +00:00 
			
		
		
		
	Removes MSI deployment tool feature
Removes the option to build a separate MSI deployment tool. This simplifies the packaging process and reduces the number of artifacts produced. The functionality is deemed redundant and not widely used.
This commit is contained in:
		| @@ -20,10 +20,8 @@ namespace Velopack | |||||||
|         Portable = 3, |         Portable = 3, | ||||||
|         /// <summary> An application installer archive. </summary> |         /// <summary> An application installer archive. </summary> | ||||||
|         Installer = 4, |         Installer = 4, | ||||||
|         /// <summary> A Windows Installer package (.msi) for the deployment tool.</summary> |  | ||||||
|         MsiDeploymentTool = 5, |  | ||||||
|         /// <summary> A Windows Installer package (.msi).</summary> |         /// <summary> A Windows Installer package (.msi).</summary> | ||||||
|         Msi = 6, |         Msi = 5, | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /// <summary> |     /// <summary> | ||||||
|   | |||||||
| @@ -103,7 +103,6 @@ public class PackTask : MSBuildAsyncTask | |||||||
|      |      | ||||||
|     public string? Compression { get; set; } |     public string? Compression { get; set; } | ||||||
| 
 | 
 | ||||||
|     public bool BuildMsiDeploymentTool { get; set; } |  | ||||||
|     public bool BuildMsi { get; set; } |     public bool BuildMsi { get; set; } | ||||||
| 
 | 
 | ||||||
|     public string? MsiVersionOverride { get; set; } |     public string? MsiVersionOverride { get; set; } | ||||||
|   | |||||||
| @@ -220,12 +220,6 @@ public class WindowsPackCommandRunner : PackageBuilder<WindowsPackOptions> | |||||||
|         Log.Debug($"Setup bundle created '{Path.GetFileName(targetSetupExe)}'."); |         Log.Debug($"Setup bundle created '{Path.GetFileName(targetSetupExe)}'."); | ||||||
|         setupExeProgress(100); |         setupExeProgress(100); | ||||||
| 
 | 
 | ||||||
|         if (Options.BuildMsiDeploymentTool && VelopackRuntimeInfo.IsWindows) { |  | ||||||
|             var msiName = DefaultName.GetSuggestedMsiDeploymentToolName(Options.PackId, Options.Channel, TargetOs); |  | ||||||
|             var msiPath = createAsset(msiName, VelopackAssetType.MsiDeploymentTool); |  | ||||||
|             CompileWixTemplateToMsiDeploymentTool(msiProgress, targetSetupExe, msiPath); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         if (Options.BuildMsi && VelopackRuntimeInfo.IsWindows) { |         if (Options.BuildMsi && VelopackRuntimeInfo.IsWindows) { | ||||||
|             var msiName = DefaultName.GetSuggestedMsiName(Options.PackId, Options.Channel, TargetOs); |             var msiName = DefaultName.GetSuggestedMsiName(Options.PackId, Options.Channel, TargetOs); | ||||||
|             var msiPath = createAsset(msiName, VelopackAssetType.Msi); |             var msiPath = createAsset(msiName, VelopackAssetType.Msi); | ||||||
| @@ -730,83 +724,6 @@ public class WindowsPackCommandRunner : PackageBuilder<WindowsPackOptions> | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     [SupportedOSPlatform("windows")] |  | ||||||
|     private void CompileWixTemplateToMsiDeploymentTool(Action<int> progress, |  | ||||||
|         string setupExePath, string msiFilePath) |  | ||||||
|     { |  | ||||||
|         bool packageAs64Bit = |  | ||||||
|             Options.TargetRuntime.Architecture is RuntimeCpu.x64 or RuntimeCpu.arm64; |  | ||||||
| 
 |  | ||||||
|         Log.Info($"Compiling machine-wide msi deployment tool in {(packageAs64Bit ? "64-bit" : "32-bit")} mode"); |  | ||||||
| 
 |  | ||||||
|         var outputDirectory = Path.GetDirectoryName(setupExePath); |  | ||||||
|         var setupName = Path.GetFileNameWithoutExtension(setupExePath); |  | ||||||
|         var culture = CultureInfo.GetCultureInfo("en-US").TextInfo.ANSICodePage; |  | ||||||
| 
 |  | ||||||
|         // WiX Identifiers may contain ASCII characters A-Z, a-z, digits, underscores (_), or |  | ||||||
|         // periods(.). Every identifier must begin with either a letter or an underscore. |  | ||||||
|         var wixId = Regex.Replace(Options.PackId, @"[^\w\.]", "_"); |  | ||||||
|         if (char.GetUnicodeCategory(wixId[0]) == UnicodeCategory.DecimalDigitNumber) |  | ||||||
|             wixId = "_" + wixId; |  | ||||||
| 
 |  | ||||||
|         Regex stacheRegex = new(@"\{\{(?<key>[^\}]+)\}\}", RegexOptions.Compiled); |  | ||||||
| 
 |  | ||||||
|         var wxsFile = Path.Combine(outputDirectory, wixId + ".wxs"); |  | ||||||
|         var objFile = Path.Combine(outputDirectory, wixId + ".wixobj"); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|         var msiVersion = Options.MsiVersionOverride; |  | ||||||
|         if (string.IsNullOrWhiteSpace(msiVersion)) { |  | ||||||
|             var parsedVersion = SemanticVersion.Parse(Options.PackVersion); |  | ||||||
|             msiVersion = $"{parsedVersion.Major}.{parsedVersion.Minor}.{parsedVersion.Patch}.0"; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         try { |  | ||||||
|             // apply dictionary to wsx template |  | ||||||
|             var templateText = File.ReadAllText(HelperFile.WixTemplatePath); |  | ||||||
| 
 |  | ||||||
|             var templateResult = stacheRegex.Replace(templateText, match => { |  | ||||||
|                 string key = match.Groups["key"].Value; |  | ||||||
|                 return key switch { |  | ||||||
|                     "Id" => wixId, |  | ||||||
|                     "Title" => GetEffectiveTitle(), |  | ||||||
|                     "Author" => GetEffectiveAuthors(), |  | ||||||
|                     "Version" => msiVersion, |  | ||||||
|                     "Summary" => GetEffectiveTitle(), |  | ||||||
|                     "Codepage" => $"{culture}", |  | ||||||
|                     "Platform" => packageAs64Bit ? "x64" : "x86", |  | ||||||
|                     "ProgramFilesFolder" => packageAs64Bit ? "ProgramFiles64Folder" : "ProgramFilesFolder", |  | ||||||
|                     "Win64YesNo" => packageAs64Bit ? "yes" : "no", |  | ||||||
|                     "SetupName" => setupName, |  | ||||||
|                     _ when key.StartsWith("IdAsGuid", StringComparison.OrdinalIgnoreCase) => GuidUtil.CreateGuidFromHash($"{Options.PackId}:{key.Substring("IdAsGuid".Length)}").ToString(), |  | ||||||
|                     _ => match.Value, |  | ||||||
|                 }; |  | ||||||
|             }); |  | ||||||
| 
 |  | ||||||
|             File.WriteAllText(wxsFile, templateResult, Encoding.UTF8); |  | ||||||
| 
 |  | ||||||
|             // Candle preprocesses and compiles WiX source files into object files (.wixobj). |  | ||||||
|             Log.Info("Compiling WiX Template (candle.exe)"); |  | ||||||
|             var candleCommand = $"{HelperFile.WixCandlePath} -nologo -out \"{objFile}\" \"{wxsFile}\""; |  | ||||||
|             _ = Exe.RunHostedCommand(candleCommand); |  | ||||||
| 
 |  | ||||||
|             progress(45); |  | ||||||
| 
 |  | ||||||
|             // Light links and binds one or more .wixobj files and creates a Windows Installer database (.msi or .msm).  |  | ||||||
|             Log.Info("Linking WiX Template (light.exe)"); |  | ||||||
|             var lightCommand = $"{HelperFile.WixLightPath} -spdb -sval -out \"{msiFilePath}\" \"{objFile}\""; |  | ||||||
|             _ = Exe.RunHostedCommand(lightCommand); |  | ||||||
| 
 |  | ||||||
|             progress(90); |  | ||||||
| 
 |  | ||||||
|         } finally { |  | ||||||
|             IoUtil.DeleteFileOrDirectoryHard(wxsFile, throwOnFailure: false); |  | ||||||
|             IoUtil.DeleteFileOrDirectoryHard(objFile, throwOnFailure: false); |  | ||||||
|         } |  | ||||||
|         progress(100); |  | ||||||
| 
 |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     protected override string[] GetMainExeSearchPaths(string packDirectory, string mainExeName) |     protected override string[] GetMainExeSearchPaths(string packDirectory, string mainExeName) | ||||||
|     { |     { | ||||||
|         return [ |         return [ | ||||||
|   | |||||||
| @@ -39,7 +39,6 @@ public class WindowsPackOptions : WindowsReleasifyOptions, INugetPackCommand, IP | |||||||
|     public string MsiLogo { get; set; } |     public string MsiLogo { get; set; } | ||||||
| 
 | 
 | ||||||
|     public bool BuildMsi { get; set; } |     public bool BuildMsi { get; set; } | ||||||
|     public bool BuildMsiDeploymentTool { get; set; } |  | ||||||
| 
 | 
 | ||||||
|     public string MsiVersionOverride { get; set; } |     public string MsiVersionOverride { get; set; } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -67,14 +67,6 @@ public static class HelperFile | |||||||
| 
 | 
 | ||||||
|     public static string StubExecutablePath => FindHelperFile("stub.exe"); |     public static string StubExecutablePath => FindHelperFile("stub.exe"); | ||||||
| 
 | 
 | ||||||
|     [SupportedOSPlatform("windows")] |  | ||||||
|     public static string WixTemplatePath => FindHelperFile("wix\\template.wxs"); |  | ||||||
|     [SupportedOSPlatform("windows")] |  | ||||||
|     public static string WixCandlePath => FindHelperFile("wix\\candle.exe"); |  | ||||||
| 
 |  | ||||||
|     [SupportedOSPlatform("windows")] |  | ||||||
|     public static string WixLightPath => FindHelperFile("wix\\light.exe"); |  | ||||||
| 
 |  | ||||||
|     [SupportedOSPlatform("windows")] |     [SupportedOSPlatform("windows")] | ||||||
|     public static string WixPath => FindHelperFile($"wix\\{WixVersion}\\wix.exe"); |     public static string WixPath => FindHelperFile($"wix\\{WixVersion}\\wix.exe"); | ||||||
| 
 | 
 | ||||||
|   | |||||||
| @@ -38,7 +38,6 @@ public class WindowsPackCommand : PackCommand | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|     public bool BuildMsi { get; private set; } |     public bool BuildMsi { get; private set; } | ||||||
|     public bool BuildMsiDeploymentTool { get; private set; } |  | ||||||
| 
 | 
 | ||||||
|     public string MsiVersionOverride { get; private set; } |     public string MsiVersionOverride { get; private set; } | ||||||
| 
 | 
 | ||||||
| @@ -92,10 +91,6 @@ public class WindowsPackCommand : PackCommand | |||||||
| 
 | 
 | ||||||
|             this.AreMutuallyExclusive(signTemplate, signParams, azTrustedSign); |             this.AreMutuallyExclusive(signTemplate, signParams, azTrustedSign); | ||||||
| 
 | 
 | ||||||
|             AddOption<bool>((v) => BuildMsiDeploymentTool = v, "--msiDeploymentTool") |  | ||||||
|                 .SetDescription("Compile a .msi machine-wide deployment tool.") |  | ||||||
|                 .SetHidden(); |  | ||||||
| 
 |  | ||||||
|             AddOption<bool>((v) => BuildMsi = v, "--msi") |             AddOption<bool>((v) => BuildMsi = v, "--msi") | ||||||
|                 .SetDescription("Compile a .msi machine-wide bootstrap package."); |                 .SetDescription("Compile a .msi machine-wide bootstrap package."); | ||||||
|              |              | ||||||
|   | |||||||
| @@ -13,12 +13,7 @@ | |||||||
|     <PackageReference Include="Octokit" Version="14.0.0" /> |     <PackageReference Include="Octokit" Version="14.0.0" /> | ||||||
|     <PackageReference Include="NuGet.Packaging" Version="6.13.2" /> |     <PackageReference Include="NuGet.Packaging" Version="6.13.2" /> | ||||||
|     <PackageReference Include="System.Formats.Asn1" Version="9.0.3" /> |     <PackageReference Include="System.Formats.Asn1" Version="9.0.3" /> | ||||||
|   </ItemGroup> |     <PackageReference Include="WixToolset.Dtf.WindowsInstaller" Version="5.0.2" /> | ||||||
|  |  | ||||||
|   <ItemGroup> |  | ||||||
|     <Reference Include="Microsoft.Deployment.WindowsInstaller"> |  | ||||||
|       <HintPath>..\..\vendor\wix\Microsoft.Deployment.WindowsInstaller.dll</HintPath> |  | ||||||
|     </Reference> |  | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|  |  | ||||||
| </Project> | </Project> | ||||||
|   | |||||||
| @@ -2,7 +2,6 @@ | |||||||
| using System.Globalization; | using System.Globalization; | ||||||
| using System.Runtime.Versioning; | using System.Runtime.Versioning; | ||||||
| using System.Xml.Linq; | using System.Xml.Linq; | ||||||
| using Microsoft.Deployment.WindowsInstaller; |  | ||||||
| using Microsoft.Win32; | using Microsoft.Win32; | ||||||
| using NuGet.Packaging; | using NuGet.Packaging; | ||||||
| using Velopack.Compression; | using Velopack.Compression; | ||||||
| @@ -13,6 +12,7 @@ using Velopack.Util; | |||||||
| using Velopack.Vpk; | using Velopack.Vpk; | ||||||
| using Velopack.Vpk.Logging; | using Velopack.Vpk.Logging; | ||||||
| using Velopack.Windows; | using Velopack.Windows; | ||||||
|  | using WixToolset.Dtf.WindowsInstaller; | ||||||
| 
 | 
 | ||||||
| namespace Velopack.Packaging.Tests; | namespace Velopack.Packaging.Tests; | ||||||
| 
 | 
 | ||||||
| @@ -645,7 +645,7 @@ public class WindowsPackTests | |||||||
|         var runner = GetPackRunner(logger); |         var runner = GetPackRunner(logger); | ||||||
|         await runner.Run(options); |         await runner.Run(options); | ||||||
| 
 | 
 | ||||||
|         string msiPath = Path.Combine(tmpReleaseDir, $"{id}-win-DeploymentTool.msi"); |         string msiPath = Path.Combine(tmpReleaseDir, $"{id}-win.msi"); | ||||||
|         Assert.True(File.Exists(msiPath)); |         Assert.True(File.Exists(msiPath)); | ||||||
| 
 | 
 | ||||||
|         using Database db = new Database(msiPath); |         using Database db = new Database(msiPath); | ||||||
|   | |||||||
							
								
								
									
										
											BIN
										
									
								
								vendor/wix/Microsoft.Deployment.Resources.dll
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								vendor/wix/Microsoft.Deployment.Resources.dll
									
									
									
									
										vendored
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								vendor/wix/Microsoft.Deployment.WindowsInstaller.dll
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								vendor/wix/Microsoft.Deployment.WindowsInstaller.dll
									
									
									
									
										vendored
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								vendor/wix/WixNetFxExtension.dll
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								vendor/wix/WixNetFxExtension.dll
									
									
									
									
										vendored
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								vendor/wix/candle.exe
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								vendor/wix/candle.exe
									
									
									
									
										vendored
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										18
									
								
								vendor/wix/candle.exe.config
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										18
									
								
								vendor/wix/candle.exe.config
									
									
									
									
										vendored
									
									
								
							| @@ -1,18 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="utf-8" ?> |  | ||||||
| <!-- |  | ||||||
|   <copyright file="app.config" company="Outercurve Foundation"> |  | ||||||
|     Copyright (c) 2004, Outercurve Foundation. |  | ||||||
|     This software is released under Microsoft Reciprocal License (MS-RL). |  | ||||||
|     The license and further copyright text can be found in the file |  | ||||||
|     LICENSE.TXT at the root directory of the distribution. |  | ||||||
|   </copyright> |  | ||||||
| --> |  | ||||||
| <configuration> |  | ||||||
|     <startup useLegacyV2RuntimeActivationPolicy="true"> |  | ||||||
|         <supportedRuntime version="v4.0" /> |  | ||||||
|         <supportedRuntime version="v2.0.50727" /> |  | ||||||
|     </startup> |  | ||||||
|     <runtime> |  | ||||||
|         <loadFromRemoteSources enabled="true"/> |  | ||||||
|     </runtime> |  | ||||||
| </configuration> |  | ||||||
							
								
								
									
										
											BIN
										
									
								
								vendor/wix/darice.cub
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								vendor/wix/darice.cub
									
									
									
									
										vendored
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								vendor/wix/light.exe
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								vendor/wix/light.exe
									
									
									
									
										vendored
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										18
									
								
								vendor/wix/light.exe.config
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										18
									
								
								vendor/wix/light.exe.config
									
									
									
									
										vendored
									
									
								
							| @@ -1,18 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="utf-8" ?> |  | ||||||
| <!-- |  | ||||||
|   <copyright file="app.config" company="Outercurve Foundation"> |  | ||||||
|     Copyright (c) 2004, Outercurve Foundation. |  | ||||||
|     This software is released under Microsoft Reciprocal License (MS-RL). |  | ||||||
|     The license and further copyright text can be found in the file |  | ||||||
|     LICENSE.TXT at the root directory of the distribution. |  | ||||||
|   </copyright> |  | ||||||
| --> |  | ||||||
| <configuration> |  | ||||||
|     <startup useLegacyV2RuntimeActivationPolicy="true"> |  | ||||||
|         <supportedRuntime version="v4.0" /> |  | ||||||
|         <supportedRuntime version="v2.0.50727" /> |  | ||||||
|     </startup> |  | ||||||
|     <runtime> |  | ||||||
|         <loadFromRemoteSources enabled="true"/> |  | ||||||
|     </runtime> |  | ||||||
| </configuration> |  | ||||||
							
								
								
									
										33
									
								
								vendor/wix/template.wxs
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										33
									
								
								vendor/wix/template.wxs
									
									
									
									
										vendored
									
									
								
							| @@ -1,33 +0,0 @@ | |||||||
| <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension" xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension"> |  | ||||||
|   <Product Id="*" Name="{{Title}} Deployment Tool" Language="1033" Codepage="{{Codepage}}" Version="{{Version}}" UpgradeCode="{{IdAsGuid1}}" Manufacturer="{{Author}}"> |  | ||||||
|  |  | ||||||
|     <Package Description="This package installs a deployment tool for {{Title}}. Not {{Title}} itself. {{Title}} is only installed if a user logs into the machine." InstallScope="perMachine" Comments="Comments" InstallerVersion="200" Compressed="yes" Platform="{{Platform}}"/> |  | ||||||
|     <MajorUpgrade AllowSameVersionUpgrades="yes" DowngradeErrorMessage="A later version of this product is already installed. Setup will now exit."/> |  | ||||||
|     <Media Id="1" Cabinet="contents.cab" EmbedCab="yes" CompressionLevel="high"/> |  | ||||||
|  |  | ||||||
|     <Directory Id="TARGETDIR" Name="SourceDir"> |  | ||||||
|       <Directory Id="{{ProgramFilesFolder}}"> |  | ||||||
|         <Directory Id="APPLICATIONROOTDIRECTORY" Name="{{Title}} Deployment Tool" /> |  | ||||||
|       </Directory> |  | ||||||
|     </Directory> |  | ||||||
|  |  | ||||||
|     <DirectoryRef Id="APPLICATIONROOTDIRECTORY"> |  | ||||||
|       <Component Id="{{Id}}.exe" Guid="{{IdAsGuid2}}" Win64="{{Win64YesNo}}"> |  | ||||||
|         <File Id="{{Id}}.exe" Name="{{Id}}DeploymentTool.exe" Source="./{{SetupName}}.exe" KeyPath="yes"/> |  | ||||||
|       </Component> |  | ||||||
|     </DirectoryRef> |  | ||||||
|  |  | ||||||
|     <DirectoryRef Id="TARGETDIR"> |  | ||||||
|       <Component Id="RegistryEntries" Guid="{{IdAsGuid3}}" Win64="{{Win64YesNo}}"> |  | ||||||
|         <RegistryKey Root="HKLM" Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Run"> |  | ||||||
|           <RegistryValue Type="expandable" Name="{{Id}}Deployment" Value=""[#{{Id}}.exe]" --checkInstall" /> |  | ||||||
|         </RegistryKey> |  | ||||||
|       </Component> |  | ||||||
|     </DirectoryRef> |  | ||||||
|  |  | ||||||
|     <Feature Id="MainApplication" Title="Main Application" Level="1"> |  | ||||||
|       <ComponentRef Id="{{Id}}.exe" /> |  | ||||||
|       <ComponentRef Id="RegistryEntries" /> |  | ||||||
|     </Feature> |  | ||||||
|   </Product> |  | ||||||
| </Wix> |  | ||||||
							
								
								
									
										
											BIN
										
									
								
								vendor/wix/wconsole.dll
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								vendor/wix/wconsole.dll
									
									
									
									
										vendored
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								vendor/wix/winterop.dll
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								vendor/wix/winterop.dll
									
									
									
									
										vendored
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								vendor/wix/wix.dll
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								vendor/wix/wix.dll
									
									
									
									
										vendored
									
									
								
							
										
											Binary file not shown.
										
									
								
							
		Reference in New Issue
	
	Block a user