mirror of
https://github.com/velopack/velopack.git
synced 2025-10-25 15:19:22 +00:00
Improve 097c1df by using provided locator instead of default in VelopackApp
This commit is contained in:
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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>
|
||||||
|
|||||||
@@ -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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user