Improve 097c1df by using provided locator instead of default in VelopackApp

This commit is contained in:
Caelan Sayler
2025-10-19 16:22:18 +01:00
parent f90ad8bb42
commit 65275b52a7
3 changed files with 41 additions and 28 deletions

View File

@@ -2,8 +2,8 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics; using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.IO; using System.IO;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using Velopack.Logging; using Velopack.Logging;
@@ -29,7 +29,8 @@ namespace Velopack.Locators
{ {
_currentProcess ??= Process.GetCurrentProcess(); _currentProcess ??= Process.GetCurrentProcess();
var fileName = _currentProcess.MainModule?.FileName ?? var fileName = _currentProcess.MainModule?.FileName ??
throw new InvalidOperationException($"Could not determine process path, please construct {nameof(IVelopackLocator)} manually."); throw new InvalidOperationException(
$"Could not determine process path, please construct {nameof(IVelopackLocator)} manually.");
return Path.GetFullPath(fileName); return Path.GetFullPath(fileName);
} }
@@ -41,8 +42,7 @@ namespace Velopack.Locators
public void StartProcess(string exePath, IEnumerable<string> args, string? workDir, bool showWindow) public void StartProcess(string exePath, IEnumerable<string> args, string? workDir, bool showWindow)
{ {
var psi = new ProcessStartInfo() var psi = new ProcessStartInfo() {
{
CreateNoWindow = true, CreateNoWindow = true,
FileName = exePath, FileName = exePath,
WorkingDirectory = workDir, WorkingDirectory = workDir,
@@ -55,27 +55,26 @@ namespace Velopack.Locators
_logger.Info($"Process started with ID: {p.Id}"); _logger.Info($"Process started with ID: {p.Id}");
if (VelopackRuntimeInfo.IsWindows) if (VelopackRuntimeInfo.IsWindows) {
{ try {
try
{
// this is an attempt to work around a bug where the restarted app fails to come to foreground. // this is an attempt to work around a bug where the restarted app fails to come to foreground.
if (!AllowSetForegroundWindow(p.Id)) if (!AllowSetForegroundWindow(p.Id))
_logger.LogWarning("Failed to allow Update.exe to set foreground window."); _logger.LogWarning("Failed to allow Update.exe to set foreground window. (This is not generally concerning.)");
} catch (Exception ex) {
}
catch (Exception ex)
{
_logger.LogWarning(ex, "Error occurred while trying to allow Update.exe to set foreground window."); _logger.LogWarning(ex, "Error occurred while trying to allow Update.exe to set foreground window.");
} }
} }
if (p.HasExited) if (p.HasExited) {
{
_logger.Error($"Process {p.Id} has already exited."); _logger.Error($"Process {p.Id} has already exited.");
} }
} }
public void Exit(int exitCode) => Environment.Exit(exitCode); public void Exit(int exitCode)
{
if (!VelopackRuntimeInfo.InUnitTestRunner) {
Environment.Exit(exitCode);
}
}
} }
} }

View File

@@ -1,13 +1,32 @@
#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Collections.Generic;
namespace Velopack.Locators namespace Velopack.Locators
{ {
/// <summary>
/// Provides an abstraction for process-related operations, allowing for platform-specific implementations.
/// </summary>
public interface IProcessImpl public interface IProcessImpl
{ {
/// <summary>
/// Gets the full path to the current process executable.
/// </summary>
/// <returns>The full path to the current process executable.</returns>
string GetCurrentProcessPath(); string GetCurrentProcessPath();
/// <summary>
/// Gets the process ID of the current process.
/// </summary>
/// <returns>The process ID of the current process.</returns>
uint GetCurrentProcessId(); uint GetCurrentProcessId();
/// <summary>
/// Starts a new process with the specified executable path, arguments, and options.
/// </summary>
/// <param name="exePath">The path to the executable to start.</param>
/// <param name="args">The command-line arguments to pass to the process.</param>
/// <param name="workDir">The working directory for the new process.</param>
/// <param name="showWindow">Whether to show a window for the new process.</param>
void StartProcess(string exePath, IEnumerable<string> args, string workDir, bool showWindow); void StartProcess(string exePath, IEnumerable<string> args, string workDir, bool showWindow);
/// <summary> /// <summary>

View File

@@ -202,11 +202,11 @@ namespace Velopack
var version = SemanticVersion.Parse(args[1]); var version = SemanticVersion.Parse(args[1]);
hook(version); hook(version);
log.Info("Completed hook, exiting..."); log.Info("Completed hook, exiting...");
Exit(0); locator.Process.Exit(0);
return; return;
} catch (Exception ex) { } catch (Exception ex) {
log.Error(ex, $"Error occurred executing user defined Velopack hook. ({args[0]})"); log.Error(ex, $"Error occurred executing user defined Velopack hook. ({args[0]})");
Exit(-1); locator.Process.Exit(-1);
return; return;
} }
} }
@@ -232,7 +232,7 @@ namespace Velopack
if (!restarted && _autoApply) { if (!restarted && _autoApply) {
log.Info("Auto apply is true, so restarting to apply update..."); log.Info("Auto apply is true, so restarting to apply update...");
UpdateExe.Apply(locator, latestLocal, false, locator.Process.GetCurrentProcessId(), true, args); UpdateExe.Apply(locator, latestLocal, false, locator.Process.GetCurrentProcessId(), true, args);
Exit(0); locator.Process.Exit(0);
} else { } else {
log.Info("Pre-condition failed, we will not restart to apply updates. (restarted: " + restarted + ", autoApply: " + _autoApply + ")"); log.Info("Pre-condition failed, we will not restart to apply updates. (restarted: " + restarted + ", autoApply: " + _autoApply + ")");
} }
@@ -273,10 +273,5 @@ namespace Velopack
} }
} }
} }
private static void Exit(int code)
{
VelopackLocator.GetCurrentOrCreateDefault().Process.Exit(code);
}
} }
} }