mirror of
				https://github.com/velopack/velopack.git
				synced 2025-10-25 15:19:22 +00:00 
			
		
		
		
	Don't use virtual member in constructor
This commit is contained in:
		| @@ -48,6 +48,12 @@ namespace Velopack.Locators | |||||||
|         /// <summary> File path of the .AppImage which mounted and ran this application. </summary> |         /// <summary> File path of the .AppImage which mounted and ran this application. </summary> | ||||||
|         public string? AppImagePath => Environment.GetEnvironmentVariable("APPIMAGE"); |         public string? AppImagePath => Environment.GetEnvironmentVariable("APPIMAGE"); | ||||||
|          |          | ||||||
|  |         /// <inheritdoc /> | ||||||
|  |         public override uint ProcessId { get; } | ||||||
|  |          | ||||||
|  |         /// <inheritdoc /> | ||||||
|  |         public override string ProcessExePath { get; } | ||||||
|  | 
 | ||||||
|         /// <summary> |         /// <summary> | ||||||
|         /// Creates a new <see cref="OsxVelopackLocator"/> and auto-detects the |         /// Creates a new <see cref="OsxVelopackLocator"/> and auto-detects the | ||||||
|         /// app information from metadata embedded in the .app. |         /// app information from metadata embedded in the .app. | ||||||
| @@ -59,18 +65,18 @@ namespace Velopack.Locators | |||||||
|                 throw new NotSupportedException("Cannot instantiate LinuxVelopackLocator on a non-linux system."); |                 throw new NotSupportedException("Cannot instantiate LinuxVelopackLocator on a non-linux system."); | ||||||
|              |              | ||||||
|             ProcessId = currentProcessId; |             ProcessId = currentProcessId; | ||||||
|             ProcessExePath = currentProcessPath; |             var ourPath = ProcessExePath = currentProcessPath; | ||||||
| 
 | 
 | ||||||
|             Log.Info($"Initialising {nameof(LinuxVelopackLocator)}"); |             Log.Info($"Initialising {nameof(LinuxVelopackLocator)}"); | ||||||
| 
 | 
 | ||||||
|             // are we inside a mounted .AppImage? |             // are we inside a mounted .AppImage? | ||||||
|             var ix = ProcessExePath.IndexOf("/usr/bin/", StringComparison.InvariantCultureIgnoreCase); |             var ix = ourPath.IndexOf("/usr/bin/", StringComparison.InvariantCultureIgnoreCase); | ||||||
|             if (ix <= 0) { |             if (ix <= 0) { | ||||||
|                 Log.Warn($"Unable to locate .AppImage root from '{ProcessExePath}'. This warning indicates that the application is not running from a mounted .AppImage, for example during development."); |                 Log.Warn($"Unable to locate .AppImage root from '{ourPath}'. This warning indicates that the application is not running from a mounted .AppImage, for example during development."); | ||||||
|                 return; |                 return; | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             var rootDir = ProcessExePath.Substring(0, ix); |             var rootDir = ourPath.Substring(0, ix); | ||||||
|             var contentsDir = Path.Combine(rootDir, "usr", "bin"); |             var contentsDir = Path.Combine(rootDir, "usr", "bin"); | ||||||
|             var updateExe = Path.Combine(contentsDir, "UpdateNix"); |             var updateExe = Path.Combine(contentsDir, "UpdateNix"); | ||||||
|             var metadataPath = Path.Combine(contentsDir, CoreUtil.SpecVersionFileName); |             var metadataPath = Path.Combine(contentsDir, CoreUtil.SpecVersionFileName); | ||||||
|   | |||||||
| @@ -45,6 +45,12 @@ namespace Velopack.Locators | |||||||
|         /// <inheritdoc /> |         /// <inheritdoc /> | ||||||
|         public override string? Channel { get; } |         public override string? Channel { get; } | ||||||
|          |          | ||||||
|  |         /// <inheritdoc /> | ||||||
|  |         public override uint ProcessId { get; } | ||||||
|  |          | ||||||
|  |         /// <inheritdoc /> | ||||||
|  |         public override string ProcessExePath { get; } | ||||||
|  | 
 | ||||||
|         /// <summary> |         /// <summary> | ||||||
|         /// Creates a new <see cref="OsxVelopackLocator"/> and auto-detects the |         /// Creates a new <see cref="OsxVelopackLocator"/> and auto-detects the | ||||||
|         /// app information from metadata embedded in the .app. |         /// app information from metadata embedded in the .app. | ||||||
| @@ -56,18 +62,18 @@ namespace Velopack.Locators | |||||||
|                 throw new NotSupportedException("Cannot instantiate OsxLocator on a non-osx system."); |                 throw new NotSupportedException("Cannot instantiate OsxLocator on a non-osx system."); | ||||||
|              |              | ||||||
|             ProcessId = currentProcessId; |             ProcessId = currentProcessId; | ||||||
|             ProcessExePath = currentProcessPath; |             var ourPath = ProcessExePath = currentProcessPath; | ||||||
| 
 | 
 | ||||||
|             Log.Info($"Initialising {nameof(OsxVelopackLocator)}"); |             Log.Info($"Initialising {nameof(OsxVelopackLocator)}"); | ||||||
| 
 | 
 | ||||||
|             // are we inside a .app? |             // are we inside a .app? | ||||||
|             var ix = ProcessExePath.IndexOf(".app/", StringComparison.InvariantCultureIgnoreCase); |             var ix = ourPath.IndexOf(".app/", StringComparison.InvariantCultureIgnoreCase); | ||||||
|             if (ix <= 0) { |             if (ix <= 0) { | ||||||
|                 Log.Warn($"Unable to locate .app root from '{ProcessExePath}'"); |                 Log.Warn($"Unable to locate .app root from '{ourPath}'"); | ||||||
|                 return; |                 return; | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             var appPath = ProcessExePath.Substring(0, ix + 4); |             var appPath = ourPath.Substring(0, ix + 4); | ||||||
|             var contentsDir = Path.Combine(appPath, "Contents"); |             var contentsDir = Path.Combine(appPath, "Contents"); | ||||||
|             var macosDir = Path.Combine(contentsDir, "MacOS"); |             var macosDir = Path.Combine(contentsDir, "MacOS"); | ||||||
|             var updateExe = Path.Combine(macosDir, "UpdateMac"); |             var updateExe = Path.Combine(macosDir, "UpdateMac"); | ||||||
|   | |||||||
| @@ -2,6 +2,7 @@ | |||||||
| using System.Diagnostics.CodeAnalysis; | using System.Diagnostics.CodeAnalysis; | ||||||
| using Microsoft.Extensions.Logging; | using Microsoft.Extensions.Logging; | ||||||
| using NuGet.Versioning; | using NuGet.Versioning; | ||||||
|  | #pragma warning disable CS1591 // Missing XML comment for publicly visible type or member | ||||||
| 
 | 
 | ||||||
| namespace Velopack.Locators | namespace Velopack.Locators | ||||||
| { | { | ||||||
| @@ -13,7 +14,6 @@ namespace Velopack.Locators | |||||||
|     [ExcludeFromCodeCoverage] |     [ExcludeFromCodeCoverage] | ||||||
|     public class TestVelopackLocator : VelopackLocator |     public class TestVelopackLocator : VelopackLocator | ||||||
|     { |     { | ||||||
|         /// <inheritdoc /> |  | ||||||
|         public override string? AppId { |         public override string? AppId { | ||||||
|             get { |             get { | ||||||
|                 if (_id == null) { |                 if (_id == null) { | ||||||
| @@ -23,7 +23,6 @@ namespace Velopack.Locators | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         /// <inheritdoc /> |  | ||||||
|         public override string? RootAppDir { |         public override string? RootAppDir { | ||||||
|             get { |             get { | ||||||
|                 if (_root == null) { |                 if (_root == null) { | ||||||
| @@ -33,7 +32,6 @@ namespace Velopack.Locators | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         /// <inheritdoc /> |  | ||||||
|         public override string? PackagesDir { |         public override string? PackagesDir { | ||||||
|             get { |             get { | ||||||
|                 if (_packages == null) { |                 if (_packages == null) { | ||||||
| @@ -43,7 +41,6 @@ namespace Velopack.Locators | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         /// <inheritdoc /> |  | ||||||
|         public override string? UpdateExePath { |         public override string? UpdateExePath { | ||||||
|             get { |             get { | ||||||
|                 if (_updatePath == null) { |                 if (_updatePath == null) { | ||||||
| @@ -53,7 +50,6 @@ namespace Velopack.Locators | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         /// <inheritdoc /> |  | ||||||
|         public override SemanticVersion? CurrentlyInstalledVersion { |         public override SemanticVersion? CurrentlyInstalledVersion { | ||||||
|             get { |             get { | ||||||
|                 if (_version == null) { |                 if (_version == null) { | ||||||
| @@ -63,7 +59,6 @@ namespace Velopack.Locators | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         /// <inheritdoc /> |  | ||||||
|         public override string? AppContentDir { |         public override string? AppContentDir { | ||||||
|             get { |             get { | ||||||
|                 if (_appContent == null) { |                 if (_appContent == null) { | ||||||
| @@ -73,14 +68,12 @@ namespace Velopack.Locators | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         /// <inheritdoc /> |  | ||||||
|         public override string? Channel { |         public override string? Channel { | ||||||
|             get { |             get { | ||||||
|                 return _channel; |                 return _channel; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         /// <inheritdoc /> |  | ||||||
|         public override VelopackAsset? GetLatestLocalFullPackage() |         public override VelopackAsset? GetLatestLocalFullPackage() | ||||||
|         { |         { | ||||||
|             if (_asset != null) { |             if (_asset != null) { | ||||||
| @@ -89,6 +82,10 @@ namespace Velopack.Locators | |||||||
|             return base.GetLatestLocalFullPackage(); |             return base.GetLatestLocalFullPackage(); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         public override uint ProcessId => 0; | ||||||
|  |          | ||||||
|  |         public override string ProcessExePath { get; } | ||||||
|  | 
 | ||||||
|         private readonly string? _updatePath; |         private readonly string? _updatePath; | ||||||
|         private readonly SemanticVersion? _version; |         private readonly SemanticVersion? _version; | ||||||
|         private readonly string? _packages; |         private readonly string? _packages; | ||||||
| @@ -106,7 +103,7 @@ namespace Velopack.Locators | |||||||
| 
 | 
 | ||||||
|         /// <inheritdoc cref="TestVelopackLocator" /> |         /// <inheritdoc cref="TestVelopackLocator" /> | ||||||
|         public TestVelopackLocator(string appId, string version, string packagesDir, string? appDir, |         public TestVelopackLocator(string appId, string version, string packagesDir, string? appDir, | ||||||
|             string? rootDir, string? updateExe, string? channel = null, ILogger? logger = null, VelopackAsset? localPackage = null) |             string? rootDir, string? updateExe, string? channel = null, ILogger? logger = null, VelopackAsset? localPackage = null, string processPath = null!) | ||||||
|             : base(logger) |             : base(logger) | ||||||
|         { |         { | ||||||
|             _id = appId; |             _id = appId; | ||||||
| @@ -117,6 +114,7 @@ namespace Velopack.Locators | |||||||
|             _appContent = appDir; |             _appContent = appDir; | ||||||
|             _channel = channel; |             _channel = channel; | ||||||
|             _asset = localPackage; |             _asset = localPackage; | ||||||
|  |             ProcessExePath = processPath; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -65,15 +65,15 @@ namespace Velopack.Locators | |||||||
|         /// <inheritdoc/> |         /// <inheritdoc/> | ||||||
|         public abstract string? Channel { get; } |         public abstract string? Channel { get; } | ||||||
| 
 | 
 | ||||||
|  |         /// <inheritdoc/> | ||||||
|  |         public abstract uint ProcessId { get; } | ||||||
|  | 
 | ||||||
|  |         /// <inheritdoc/> | ||||||
|  |         public abstract string ProcessExePath { get; } | ||||||
|  |          | ||||||
|         /// <inheritdoc/> |         /// <inheritdoc/> | ||||||
|         public virtual bool IsPortable => false; |         public virtual bool IsPortable => false; | ||||||
| 
 | 
 | ||||||
|         /// <inheritdoc/> |  | ||||||
|         public uint ProcessId { get; protected set; } |  | ||||||
| 
 |  | ||||||
|         /// <inheritdoc/> |  | ||||||
|         public string ProcessExePath { get; protected set; } |  | ||||||
| 
 |  | ||||||
|         /// <inheritdoc/> |         /// <inheritdoc/> | ||||||
|         public virtual string? ThisExeRelativePath { |         public virtual string? ThisExeRelativePath { | ||||||
|             get { |             get { | ||||||
|   | |||||||
| @@ -38,6 +38,12 @@ namespace Velopack.Locators | |||||||
|         /// <inheritdoc /> |         /// <inheritdoc /> | ||||||
|         public override string? Channel { get; } |         public override string? Channel { get; } | ||||||
| 
 | 
 | ||||||
|  |         /// <inheritdoc /> | ||||||
|  |         public override uint ProcessId { get; } | ||||||
|  |          | ||||||
|  |         /// <inheritdoc /> | ||||||
|  |         public override string ProcessExePath { get; } | ||||||
|  | 
 | ||||||
|         /// <inheritdoc cref="WindowsVelopackLocator" /> |         /// <inheritdoc cref="WindowsVelopackLocator" /> | ||||||
|         public WindowsVelopackLocator(string currentProcessPath, uint currentProcessId, ILogger logger) |         public WindowsVelopackLocator(string currentProcessPath, uint currentProcessId, ILogger logger) | ||||||
|             : base(logger) |             : base(logger) | ||||||
| @@ -46,7 +52,7 @@ namespace Velopack.Locators | |||||||
|                 throw new NotSupportedException("Cannot instantiate WindowsLocator on a non-Windows system."); |                 throw new NotSupportedException("Cannot instantiate WindowsLocator on a non-Windows system."); | ||||||
| 
 | 
 | ||||||
|             ProcessId = currentProcessId; |             ProcessId = currentProcessId; | ||||||
|             ProcessExePath = currentProcessPath; |             var ourPath = ProcessExePath = currentProcessPath; | ||||||
| 
 | 
 | ||||||
|             // We try various approaches here. Firstly, if Update.exe is in the parent directory, |             // We try various approaches here. Firstly, if Update.exe is in the parent directory, | ||||||
|             // we use that. If it's not present, we search for a parent "current" or "app-{ver}" directory, |             // we use that. If it's not present, we search for a parent "current" or "app-{ver}" directory, | ||||||
| @@ -54,11 +60,11 @@ namespace Velopack.Locators | |||||||
|             // There is some legacy code here, because it's possible that we're running in an "app-{ver}"  |             // There is some legacy code here, because it's possible that we're running in an "app-{ver}"  | ||||||
|             // directory which is NOT containing a sq.version, in which case we need to infer a lot of info. |             // directory which is NOT containing a sq.version, in which case we need to infer a lot of info. | ||||||
| 
 | 
 | ||||||
|             ProcessExePath = Path.GetFullPath(ProcessExePath); |             ProcessExePath = Path.GetFullPath(ourPath); | ||||||
|             string myDirPath = Path.GetDirectoryName(ProcessExePath)!; |             string myDirPath = Path.GetDirectoryName(ourPath)!; | ||||||
|             var myDirName = Path.GetFileName(myDirPath); |             var myDirName = Path.GetFileName(myDirPath); | ||||||
|             var possibleUpdateExe = Path.GetFullPath(Path.Combine(myDirPath, "..", "Update.exe")); |             var possibleUpdateExe = Path.GetFullPath(Path.Combine(myDirPath, "..", "Update.exe")); | ||||||
|             var ixCurrent = ProcessExePath.LastIndexOf("/current/", StringComparison.InvariantCultureIgnoreCase); |             var ixCurrent = ourPath.LastIndexOf("/current/", StringComparison.InvariantCultureIgnoreCase); | ||||||
| 
 | 
 | ||||||
|             Log.Info($"Initializing {nameof(WindowsVelopackLocator)}"); |             Log.Info($"Initializing {nameof(WindowsVelopackLocator)}"); | ||||||
| 
 | 
 | ||||||
| @@ -86,7 +92,7 @@ namespace Velopack.Locators | |||||||
|                 } |                 } | ||||||
|             } else if (ixCurrent > 0) { |             } else if (ixCurrent > 0) { | ||||||
|                 // this is an attempt to handle the case where we are running in a nested current directory. |                 // this is an attempt to handle the case where we are running in a nested current directory. | ||||||
|                 var rootDir = ProcessExePath.Substring(0, ixCurrent); |                 var rootDir = ourPath.Substring(0, ixCurrent); | ||||||
|                 var currentDir = Path.Combine(rootDir, "current"); |                 var currentDir = Path.Combine(rootDir, "current"); | ||||||
|                 var manifestFile = Path.Combine(currentDir, CoreUtil.SpecVersionFileName); |                 var manifestFile = Path.Combine(currentDir, CoreUtil.SpecVersionFileName); | ||||||
|                 possibleUpdateExe = Path.GetFullPath(Path.Combine(rootDir, "Update.exe")); |                 possibleUpdateExe = Path.GetFullPath(Path.Combine(rootDir, "Update.exe")); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user