From b50f43ae7cdc646400c0744094974419a4caa744 Mon Sep 17 00:00:00 2001 From: Vic <10308169+VictoriousRaptor@users.noreply.github.com> Date: Tue, 29 Nov 2022 01:02:53 +0800 Subject: [PATCH] Remove ApplicationActivationHelper --- .../Programs/ApplicationActivationHelper.cs | 42 ----------------- .../Programs/UWP.cs | 47 ++++--------------- .../Programs/Win32.cs | 4 +- 3 files changed, 12 insertions(+), 81 deletions(-) delete mode 100644 Plugins/Flow.Launcher.Plugin.Program/Programs/ApplicationActivationHelper.cs diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/ApplicationActivationHelper.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/ApplicationActivationHelper.cs deleted file mode 100644 index 790a70392..000000000 --- a/Plugins/Flow.Launcher.Plugin.Program/Programs/ApplicationActivationHelper.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -namespace Flow.Launcher.Plugin.Program.Programs -{ - public class ApplicationActivationHelper - { - // Reference : https://github.com/MicrosoftEdge/edge-launcher/blob/108e63df0b4cb5cd9d5e45aa7a264690851ec51d/MIcrosoftEdgeLauncherCsharp/Program.cs - public enum ActivateOptions - { - None = 0x00000000, - DesignMode = 0x00000001, - NoErrorUI = 0x00000002, - NoSplashScreen = 0x00000004, - } - - /// ApplicationActivationManager - [ComImport, Guid("2e941141-7f97-4756-ba1d-9decde894a3d"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] - interface IApplicationActivationManager - { - IntPtr ActivateApplication([In] string appUserModelId, [In] string arguments, [In] ActivateOptions options, [Out] out uint processId); - IntPtr ActivateForFile([In] string appUserModelId, [In] IntPtr /*IShellItemArray* */ itemArray, [In] string verb, [Out] out uint processId); - IntPtr ActivateForProtocol([In] string appUserModelId, [In] IntPtr /* IShellItemArray* */itemArray, [Out] out uint processId); - } - - // Application Activation Manager Class - [ComImport, Guid("45BA127D-10A8-46EA-8AB7-56EA9078943C")] - public class ApplicationActivationManager : IApplicationActivationManager - { - - [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)/*, PreserveSig*/] - public extern IntPtr ActivateApplication([In] string appUserModelId, [In] string arguments, [In] ActivateOptions options, [Out] out uint processId); - - [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] - public extern IntPtr ActivateForFile([In] string appUserModelId, [In] IntPtr /*IShellItemArray* */ itemArray, [In] string verb, [Out] out uint processId); - - [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] - public extern IntPtr ActivateForProtocol([In] string appUserModelId, [In] IntPtr /* IShellItemArray* */itemArray, [Out] out uint processId); - } - } -} diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs index 5198f5761..47443b7ee 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs +++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs @@ -404,20 +404,13 @@ namespace Flow.Launcher.Plugin.Program.Programs !e.SpecialKeyState.WinPressed ); - if (elevated && CanRunElevated) + bool shouldRunElevated = elevated && CanRunElevated; + _ = Task.Run(() => Launch(shouldRunElevated)).ConfigureAwait(false); + if (elevated && !shouldRunElevated) { - LaunchElevated(); - } - else - { - Launch(api); - - if (elevated) - { - var title = "Plugin: Program"; - var message = api.GetTranslation("flowlauncher_plugin_program_run_as_administrator_not_supported_message"); - api.ShowMsg(title, message, string.Empty); - } + var title = "Plugin: Program"; + var message = api.GetTranslation("flowlauncher_plugin_program_run_as_administrator_not_supported_message"); + api.ShowMsg(title, message, string.Empty); } return true; @@ -452,7 +445,7 @@ namespace Flow.Launcher.Plugin.Program.Programs Title = api.GetTranslation("flowlauncher_plugin_program_run_as_administrator"), Action = _ => { - LaunchElevated(); + Task.Run(() => Launch(true)).ConfigureAwait(false); return true; }, IcoPath = "Images/cmd.png" @@ -462,35 +455,15 @@ namespace Flow.Launcher.Plugin.Program.Programs return contextMenus; } - private async void Launch(IPublicAPI api) + private void Launch(bool elevated=false) { - var appManager = new ApplicationActivationHelper.ApplicationActivationManager(); - const string noArgs = ""; - const ApplicationActivationHelper.ActivateOptions noFlags = ApplicationActivationHelper.ActivateOptions.None; - await Task.Run(() => - { - try - { - _ = appManager.ActivateApplication(UserModelId, noArgs, noFlags, out _); - } - catch (Exception) - { - var name = "Plugin: Program"; - var message = $"Can't start UWP: {DisplayName}"; - api.ShowMsg(name, message, string.Empty); - } - }); - } - - private void LaunchElevated() - { - string command = "shell:AppsFolder\\" + UniqueIdentifier; + string command = "shell:AppsFolder\\" + UserModelId; command = Environment.ExpandEnvironmentVariables(command.Trim()); var info = new ProcessStartInfo(command) { UseShellExecute = true, - Verb = "runas", + Verb = elevated ? "runas" : "" }; Main.StartProcess(Process.Start, info); diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs index 7fbffb548..e89970fb4 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs +++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs @@ -142,10 +142,10 @@ namespace Flow.Launcher.Plugin.Program.Programs FileName = FullPath, WorkingDirectory = ParentDirectory, UseShellExecute = true, - Verb = runAsAdmin ? "runas" : null + Verb = runAsAdmin ? "runas" : "" }; - Task.Run(() => Main.StartProcess(Process.Start, info)); + _ = Task.Run(() => Main.StartProcess(Process.Start, info)); return true; }