Add working folder and minimized launch options

This commit is contained in:
Ray Berezowski
2026-08-26 22:37:09 -04:00
parent c5fd18e6d3
commit 57b2c4b0cc
9 changed files with 160 additions and 18 deletions

View File

@@ -180,10 +180,12 @@ public sealed class LauncherController : IDisposable
Type = item.Type,
Target = item.Target,
Arguments = item.Arguments,
WorkingFolder = item.WorkingFolder,
IconPath = item.IconPath,
IsFavorite = false,
IsDisabled = false,
RunAsAdmin = item.RunAsAdmin,
StartMinimized = item.StartMinimized,
DisplayMode = item.DisplayMode,
Children = []
};
@@ -278,6 +280,7 @@ public sealed class LauncherController : IDisposable
string target = Environment.ExpandEnvironmentVariables(item.Target);
bool runAsAdmin = item.RunAsAdmin && CanRunAsAdmin(item.Type);
string launchTarget = runAsAdmin ? ResolveExecutableTarget(target) : target;
string workingDirectory = GetWorkingDirectory(item, target);
try
{
@@ -286,7 +289,7 @@ public sealed class LauncherController : IDisposable
FileName = launchTarget,
Arguments = item.Arguments ?? "",
UseShellExecute = true,
WorkingDirectory = Directory.Exists(target) ? target : ConfigService.AppFolder
WorkingDirectory = workingDirectory
};
if (runAsAdmin)
@@ -294,6 +297,11 @@ public sealed class LauncherController : IDisposable
startInfo.Verb = "runas";
}
if (item.StartMinimized && CanUseLaunchOptions(item.Type))
{
startInfo.WindowStyle = ProcessWindowStyle.Minimized;
}
Process.Start(startInfo);
return true;
}
@@ -309,6 +317,25 @@ public sealed class LauncherController : IDisposable
return itemType is LauncherItemType.App or LauncherItemType.File;
}
public static bool CanUseLaunchOptions(LauncherItemType itemType)
{
return itemType is LauncherItemType.App or LauncherItemType.File;
}
private static string GetWorkingDirectory(LauncherItem item, string target)
{
if (CanUseLaunchOptions(item.Type) && !string.IsNullOrWhiteSpace(item.WorkingFolder))
{
string configuredFolder = Environment.ExpandEnvironmentVariables(item.WorkingFolder.Trim());
if (Directory.Exists(configuredFolder))
{
return configuredFolder;
}
}
return Directory.Exists(target) ? target : ConfigService.AppFolder;
}
private static string ResolveExecutableTarget(string target)
{
if (Path.IsPathRooted(target) || Path.GetDirectoryName(target) is { Length: > 0 })