Skip to content
This repository has been archived by the owner on Jul 5, 2024. It is now read-only.

Commit

Permalink
cli option for configuring signtool location (see #29)
Browse files Browse the repository at this point in the history
  • Loading branch information
caesay committed Jan 13, 2022
1 parent 1c096bc commit 9df6882
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 9 deletions.
6 changes: 4 additions & 2 deletions src/Squirrel/Internal/HelperExe.cs
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ public static async Task SetPEVersionBlockFromPackageInfo(string exePath, NuGet.
}
}

public static async Task SignPEFile(string exePath, string signingOpts)
public static async Task SignPEFile(string signPath, string exePath, string signingOpts)
{
if (String.IsNullOrEmpty(signingOpts)) {
Log.Debug("{0} was not signed.", exePath);
Expand All @@ -177,9 +177,11 @@ public static async Task SignPEFile(string exePath, string signingOpts)
Log.ErrorException("Failed to determine signing status for " + exePath, ex);
}

signPath = signPath ?? SignToolPath;

Log.Info("About to sign {0}", exePath);

var psi = Utility.CreateProcessStartInfo(SignToolPath, $"sign {signingOpts} \"{exePath}\"");
var psi = Utility.CreateProcessStartInfo(signPath, $"sign {signingOpts} \"{exePath}\"");
var processResult = await Utility.InvokeProcessUnsafeAsync(psi, CancellationToken.None).ConfigureAwait(false);

if (processResult.ExitCode != 0) {
Expand Down
4 changes: 3 additions & 1 deletion src/SquirrelCli/Options.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ internal class ReleasifyOptions : BaseOptions
public string package { get; set; }
public string baseUrl { get; private set; }
public string signParams { get; private set; }
public string signToolPath { get; private set; }
public string framework { get; private set; }
public string splashImage { get; private set; }
public string updateIcon { get; private set; }
Expand All @@ -40,7 +41,6 @@ public ReleasifyOptions()

// public arguments
Add("p=|package=", "Path to a '.nupkg' package to releasify", v => package = v);
Add("n=|signParams=", "Sign files via SignTool.exe using these parameters", v => signParams = v);
Add("f=|framework=", "List of required runtimes to install during setup -\nexample: 'net6,vcredist143'", v => framework = v);
Add("s=|splashImage=", "Splash image to be displayed during installation", v => splashImage = v);
Add("i=|icon=", "Sets all the icons: Update, App, and Setup",
Expand All @@ -50,6 +50,8 @@ public ReleasifyOptions()
Add("setupIcon=", ".ico to be used for Setup.exe", v => setupIcon = v);
Add("noDelta", "Skip the generation of delta packages", v => noDelta = true);
Add("msi=", "Compiles a .msi machine-wide deployment tool.\nThis value must be either 'x86' 'x64'", v => msi = v.ToLower());
Add("n=|signParams=", "Sign files via SignTool.exe using these parameters", v => signParams = v);
Add("signToolPath=", "Use a custom signing binary (eg AzureSignTool.exe)", v => signToolPath = v);
}

public override void Validate()
Expand Down
14 changes: 8 additions & 6 deletions src/SquirrelCli/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,7 @@ static void Releasify(ReleasifyOptions options)
}

var signingOpts = options.signParams;
var signToolPath = options.signToolPath;
var package = options.package;
var baseUrl = options.baseUrl;
var generateDeltas = !options.noDelta;
Expand Down Expand Up @@ -169,7 +170,7 @@ static void Releasify(ReleasifyOptions options)
throw new InvalidOperationException("Update.exe is corrupt. Broken Squirrel install?");

// Sign Update.exe so that virus scanners don't think we're pulling one over on them
HelperExe.SignPEFile(updatePath, signingOpts).Wait();
HelperExe.SignPEFile(signToolPath, updatePath, signingOpts).Wait();

// copy input package to target output directory
var di = new DirectoryInfo(targetDir);
Expand Down Expand Up @@ -218,7 +219,7 @@ static void Releasify(ReleasifyOptions options)
// sign all exe's in this package
new DirectoryInfo(pkgPath).GetAllFilesRecursively()
.Where(x => Utility.FileIsLikelyPEImage(x.Name))
.ForEachAsync(x => HelperExe.SignPEFile(x.FullName, signingOpts))
.ForEachAsync(x => HelperExe.SignPEFile(signToolPath, x.FullName, signingOpts))
.Wait();
// copy Update.exe into package, so it can also be updated in both full/delta packages
Expand Down Expand Up @@ -296,18 +297,18 @@ static void Releasify(ReleasifyOptions options)

infosave.WriteToFile(targetSetupExe);

HelperExe.SignPEFile(targetSetupExe, signingOpts).Wait();
HelperExe.SignPEFile(signToolPath, targetSetupExe, signingOpts).Wait();

if (!String.IsNullOrEmpty(options.msi)) {
bool x64 = options.msi.Equals("x64");
createMsiPackage(targetSetupExe, new ZipPackage(package), x64).Wait();
HelperExe.SignPEFile(targetSetupExe.Replace(".exe", ".msi"), signingOpts).Wait();
var msiPath = createMsiPackage(targetSetupExe, new ZipPackage(package), x64).Result;
HelperExe.SignPEFile(signToolPath, msiPath, signingOpts).Wait();
}

Log.Info("Done");
}

static async Task createMsiPackage(string setupExe, IPackage package, bool packageAs64Bit)
static async Task<string> createMsiPackage(string setupExe, IPackage package, bool packageAs64Bit)
{
Log.Info($"Compiling machine-wide msi deployment tool in {(packageAs64Bit ? "64-bit" : "32-bit")} mode");

Expand Down Expand Up @@ -343,6 +344,7 @@ static async Task createMsiPackage(string setupExe, IPackage package, bool packa
try {
var msiTarget = Path.Combine(setupExeDir, setupName + "_DeploymentTool.msi");
await HelperExe.CompileWixTemplateToMsi(wxsTarget, msiTarget);
return msiTarget;
} finally {
File.Delete(wxsTarget);
}
Expand Down

0 comments on commit 9df6882

Please sign in to comment.