diff --git a/src/lib-csharp/VelopackAsset.cs b/src/lib-csharp/VelopackAsset.cs
index 291a9969..597249b5 100644
--- a/src/lib-csharp/VelopackAsset.cs
+++ b/src/lib-csharp/VelopackAsset.cs
@@ -20,8 +20,8 @@ namespace Velopack
Portable = 3,
/// An application installer archive.
Installer = 4,
- /// A Windows Installer package (.msi) for the application.
- Msi = 5,
+ /// A Windows Installer package (.msi) for the deployment tool.
+ MsiDeploymentTool = 5
}
///
diff --git a/src/vpk/Velopack.Packaging.Unix/Commands/LinuxPackOptions.cs b/src/vpk/Velopack.Packaging.Unix/Commands/LinuxPackOptions.cs
index f05a56a5..19c0fa45 100644
--- a/src/vpk/Velopack.Packaging.Unix/Commands/LinuxPackOptions.cs
+++ b/src/vpk/Velopack.Packaging.Unix/Commands/LinuxPackOptions.cs
@@ -37,5 +37,4 @@ public class LinuxPackOptions : IPackOptions
public string Categories { get; set; }
public string Compression { get; set; }
- public bool BuildMsi => false;
}
diff --git a/src/vpk/Velopack.Packaging.Unix/Commands/OsxPackCommandRunner.cs b/src/vpk/Velopack.Packaging.Unix/Commands/OsxPackCommandRunner.cs
index a36cb5fd..072880e2 100644
--- a/src/vpk/Velopack.Packaging.Unix/Commands/OsxPackCommandRunner.cs
+++ b/src/vpk/Velopack.Packaging.Unix/Commands/OsxPackCommandRunner.cs
@@ -119,7 +119,7 @@ public class OsxPackCommandRunner : PackageBuilder
return Task.CompletedTask;
}
- protected override Task CreateSetupPackage(Action progress, string releasePkg, string packDir, string pkgPath)
+ protected override Task CreateSetupPackage(Action progress, string releasePkg, string packDir, string pkgPath, Func createAsset)
{
// create installer package, sign and notarize
if (!Options.NoInst) {
diff --git a/src/vpk/Velopack.Packaging.Unix/Commands/OsxPackOptions.cs b/src/vpk/Velopack.Packaging.Unix/Commands/OsxPackOptions.cs
index 8bc7d081..9db24541 100644
--- a/src/vpk/Velopack.Packaging.Unix/Commands/OsxPackOptions.cs
+++ b/src/vpk/Velopack.Packaging.Unix/Commands/OsxPackOptions.cs
@@ -35,5 +35,4 @@ public class OsxPackOptions : OsxBundleOptions, IPackOptions
public string Channel { get; set; }
public string Exclude { get; set; }
- public bool BuildMsi => false;
}
diff --git a/src/vpk/Velopack.Packaging.Windows/Commands/WindowsPackCommandRunner.cs b/src/vpk/Velopack.Packaging.Windows/Commands/WindowsPackCommandRunner.cs
index 86ed2163..0e59926f 100644
--- a/src/vpk/Velopack.Packaging.Windows/Commands/WindowsPackCommandRunner.cs
+++ b/src/vpk/Velopack.Packaging.Windows/Commands/WindowsPackCommandRunner.cs
@@ -183,11 +183,24 @@ public class WindowsPackCommandRunner : PackageBuilder
return String.Join(",", validated);
}
- protected override Task CreateSetupPackage(Action progress, string releasePkg, string packDir, string targetSetupExe)
+ protected override Task CreateSetupPackage(Action progress, string releasePkg, string packDir, string targetSetupExe, Func createAsset)
{
+ void setupExeProgress(int x)
+ {
+ if (Options.BuildMsi) {
+ progress(x / 2);
+ } else {
+ progress(x);
+ }
+ }
+ void msiProgress(int value)
+ {
+ progress(50 + value / 2);
+ }
+
var bundledZip = new ZipPackage(releasePkg);
IoUtil.Retry(() => File.Copy(HelperFile.SetupPath, targetSetupExe, true));
- progress(10);
+ setupExeProgress(10);
var editor = new ResourceEdit(targetSetupExe, Log);
editor.SetVersionInfo(bundledZip);
@@ -197,14 +210,20 @@ public class WindowsPackCommandRunner : PackageBuilder
editor.Commit();
- progress(25);
+ setupExeProgress(25);
Log.Debug($"Creating Setup bundle");
SetupBundle.CreatePackageBundle(targetSetupExe, releasePkg);
- progress(50);
+ setupExeProgress(50);
Log.Debug("Signing Setup bundle");
- SignFilesImpl(CoreUtil.CreateProgressDelegate(progress, 50, 100), targetSetupExe);
+ SignFilesImpl(CoreUtil.CreateProgressDelegate( setupExeProgress, 50, 100), targetSetupExe);
Log.Debug($"Setup bundle created '{Path.GetFileName(targetSetupExe)}'.");
- progress(100);
+ setupExeProgress(100);
+
+ if (Options.BuildMsi && VelopackRuntimeInfo.IsWindows) {
+ var msiName = DefaultName.GetSuggestedMsiName(Options.PackId, Options.Channel, TargetOs);
+ var msiPath = createAsset(msiName, VelopackAssetType.MsiDeploymentTool);
+ CompileWixTemplateToMsi(msiProgress, targetSetupExe, msiPath);
+ }
return Task.CompletedTask;
}
@@ -241,13 +260,6 @@ public class WindowsPackCommandRunner : PackageBuilder
return dict;
}
- protected override Task CreateMsiPackage(Action progress, string setupExePath, string msiPath)
- {
- if (VelopackRuntimeInfo.IsWindows) {
- CompileWixTemplateToMsi(progress, setupExePath, msiPath);
- }
- return Task.CompletedTask;
- }
private void CreateExecutableStubForExe(string exeToCopy, string targetStubPath)
{
diff --git a/src/vpk/Velopack.Packaging/Abstractions/IPackOptions.cs b/src/vpk/Velopack.Packaging/Abstractions/IPackOptions.cs
index 9d37a5e7..9b2fb687 100644
--- a/src/vpk/Velopack.Packaging/Abstractions/IPackOptions.cs
+++ b/src/vpk/Velopack.Packaging/Abstractions/IPackOptions.cs
@@ -9,5 +9,4 @@ public interface IPackOptions : INugetPackCommand, IPlatformOptions
string Exclude { get; set; }
bool NoPortable { get; set; }
bool NoInst { get; set; }
- bool BuildMsi { get; }
}
diff --git a/src/vpk/Velopack.Packaging/PackageBuilder.cs b/src/vpk/Velopack.Packaging/PackageBuilder.cs
index 864b3a03..86b7d0d6 100644
--- a/src/vpk/Velopack.Packaging/PackageBuilder.cs
+++ b/src/vpk/Velopack.Packaging/PackageBuilder.cs
@@ -29,7 +29,7 @@ public abstract class PackageBuilder : ICommand
protected Dictionary ExtraNuspecMetadata { get; } = new();
- private readonly Regex REGEX_EXCLUDES = new Regex(@".*[\\\/]createdump.*|.*\.vshost\..*|.*\.nupkg$", RegexOptions.IgnoreCase | RegexOptions.Compiled);
+ private readonly Regex REGEX_EXCLUDES = new(@".*[\\\/]createdump.*|.*\.vshost\..*|.*\.nupkg$", RegexOptions.IgnoreCase | RegexOptions.Compiled);
public PackageBuilder(RuntimeOs supportedOs, ILogger logger, IFancyConsole console)
{
@@ -148,14 +148,13 @@ public abstract class PackageBuilder : ICommand
});
Task setupTask = null;
- string setupExePath = null;
if (!Options.NoInst && TargetOs != RuntimeOs.Linux) {
setupTask = ctx.RunTask(
"Building setup package",
async (progress) => {
var suggestedName = DefaultName.GetSuggestedSetupName(packId, channel, TargetOs);
- var path = setupExePath = assetCache.MakeAssetPath(suggestedName, VelopackAssetType.Installer);
- await CreateSetupPackage(progress, releasePath, packDirectory, path);
+ var path = assetCache.MakeAssetPath(suggestedName, VelopackAssetType.Installer);
+ await CreateSetupPackage(progress, releasePath, packDirectory, path, assetCache.MakeAssetPath);
});
}
@@ -177,16 +176,6 @@ public abstract class PackageBuilder : ICommand
if (TargetOs != RuntimeOs.Linux && portableTask != null) await portableTask;
if (setupTask != null) await setupTask;
- if (!Options.NoInst && Options.BuildMsi && TargetOs == RuntimeOs.Windows) {
- await ctx.RunTask(
- "Building MSI package",
- async (progress) => {
- var msiName = DefaultName.GetSuggestedMsiName(packId, channel, TargetOs);
- var msiPath = assetCache.MakeAssetPath(msiName, VelopackAssetType.Msi);
- await CreateMsiPackage(progress, setupExePath, msiPath);
- });
- }
-
await ctx.RunTask(
"Post-process steps",
(progress) => {
@@ -282,12 +271,7 @@ public abstract class PackageBuilder : ICommand
return Task.FromResult(dp.PackageFile);
}
- protected virtual Task CreateSetupPackage(Action progress, string releasePkg, string packDir, string outputPath)
- {
- return Task.CompletedTask;
- }
-
- protected virtual Task CreateMsiPackage(Action progress, string setupExePath, string msiPath)
+ protected virtual Task CreateSetupPackage(Action progress, string releasePkg, string packDir, string outputPath, Func createAsset)
{
return Task.CompletedTask;
}
@@ -313,10 +297,7 @@ public abstract class PackageBuilder : ICommand
progress(100);
}
- protected virtual Dictionary GetReleaseMetadataFiles()
- {
- return new Dictionary();
- }
+ protected virtual Dictionary GetReleaseMetadataFiles() => [];
protected virtual void CopyFiles(DirectoryInfo source, DirectoryInfo target, Action progress, bool excludeAnnoyances = false)
{
@@ -364,7 +345,7 @@ public abstract class PackageBuilder : ICommand
// copy the contents of the folder, not the folder itself.
var src = source.FullName.TrimEnd('/') + "/.";
var dest = target.FullName.TrimEnd('/') + "/";
- Log.Debug(Exe.InvokeAndThrowIfNonZero("cp", new[] { "-a", src, dest }, null));
+ Log.Debug(Exe.InvokeAndThrowIfNonZero("cp", ["-a", src, dest], null));
if (excludeAnnoyances) {
foreach (var f in target.EnumerateFiles("*", SearchOption.AllDirectories)) {
diff --git a/src/vpk/Velopack.Vpk/Commands/Packaging/WindowsPackCommand.cs b/src/vpk/Velopack.Vpk/Commands/Packaging/WindowsPackCommand.cs
index b803f60d..8079bc06 100644
--- a/src/vpk/Velopack.Vpk/Commands/Packaging/WindowsPackCommand.cs
+++ b/src/vpk/Velopack.Vpk/Commands/Packaging/WindowsPackCommand.cs
@@ -76,8 +76,7 @@ public class WindowsPackCommand : PackCommand
AddOption((v) => BuildMsi = v, "--msi")
.SetDescription("Compile a .msi machine-wide deployment tool.")
- .SetHidden()
- .SetArgumentHelpName("BITNESS");
+ .SetHidden();
AddOption((v) => MsiVersionOverride = v, "--msiVersion")
.SetDescription("Override the product version for the generated msi.")
diff --git a/test/Velopack.Packaging.Tests/WindowsPackTests.cs b/test/Velopack.Packaging.Tests/WindowsPackTests.cs
index f47bcc86..5db53d95 100644
--- a/test/Velopack.Packaging.Tests/WindowsPackTests.cs
+++ b/test/Velopack.Packaging.Tests/WindowsPackTests.cs
@@ -13,7 +13,6 @@ using Velopack.Util;
using Velopack.Vpk;
using Velopack.Vpk.Logging;
using Velopack.Windows;
-using static Azure.Core.HttpHeader;
namespace Velopack.Packaging.Tests;