Added runas admin to Context Menu

This commit is contained in:
Jordi Adoumie
2024-10-23 15:00:20 -04:00
parent 63dcead687
commit 4db1cc8fcc
3 changed files with 105 additions and 2 deletions

View File

@@ -84,7 +84,7 @@
<PackageVersion Include="System.Security.Cryptography.ProtectedData" Version="8.0.0" />
<PackageVersion Include="System.ServiceProcess.ServiceController" Version="8.0.0" />
<PackageVersion Include="System.Text.Encoding.CodePages" Version="8.0.0" />
<PackageVersion Include="System.Text.Json" Version="8.0.4" />
<PackageVersion Include="System.Text.Json" Version="8.0.5" />
<PackageVersion Include="UnicodeInformation" Version="2.6.0" />
<PackageVersion Include="UnitsNet" Version="5.56.0" />
<PackageVersion Include="UTF.Unknown" Version="2.5.1" />
@@ -100,4 +100,4 @@
<PackageVersion Include="Microsoft.VariantAssignment.Client" Version="2.4.17140001" />
<PackageVersion Include="Microsoft.VariantAssignment.Contract" Version="3.0.16990001" />
</ItemGroup>
</Project>
</Project>

View File

@@ -0,0 +1,100 @@
// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Resources;
using System.Text;
using System.Threading.Tasks;
using Microsoft.CmdPal.Ext.WindowsTerminal.Helpers;
using Microsoft.CmdPal.Extensions;
using Microsoft.CmdPal.Extensions.Helpers;
using Windows.UI;
namespace Microsoft.CmdPal.Ext.WindowsTerminal.Commands;
internal sealed partial class LaunchProfileAsAdminCommand : InvokableCommand
{
private readonly string _id;
private readonly string _profile;
private readonly bool _openNewTab;
private readonly bool _openQuake;
internal LaunchProfileAsAdminCommand(string id, string profile, bool openNewTab, bool openQuake)
{
this._id = id;
this._profile = profile;
this._openNewTab = openNewTab;
this._openQuake = openQuake;
this.Name = "Launch Profile as Admin";
this.Icon = new("\xE7EF");
}
private void LaunchElevated(string id, string profile)
{
try
{
var path = "shell:AppsFolder\\" + id;
var arguments = TerminalHelper.GetArguments(profile, _openNewTab, _openQuake);
var startInfo = new System.Diagnostics.ProcessStartInfo
{
FileName = path,
Arguments = arguments,
UseShellExecute = true,
Verb = "runas",
};
System.Diagnostics.Process.Start(startInfo);
}
#pragma warning disable IDE0059, CS0168, SA1005
catch (Exception ex)
{
// TODO - We need to figure out some logging
//var name = "Plugin: " + Resources.plugin_name;
//var message = Resources.run_terminal_failed;
//Log.Exception("Failed to open Windows Terminal", ex, GetType());
//_context.API.ShowMsg(name, message, string.Empty);
}
}
#pragma warning restore IDE0059, CS0168, SA1005
private void Launch(string id, string profile)
{
var appManager = new ApplicationActivationManager();
const ActivateOptions noFlags = ActivateOptions.None;
var queryArguments = TerminalHelper.GetArguments(profile, _openNewTab, _openQuake);
try
{
appManager.ActivateApplication(id, queryArguments, noFlags, out var unusedPid);
}
#pragma warning disable IDE0059, CS0168
catch (Exception ex)
{
// TODO: We need to figure out some logging
// var name = "Plugin: " + Resources.plugin_name;
// var message = Resources.run_terminal_failed;
// Log.Exception("Failed to open Windows Terminal", ex, GetType());
// _context.API.ShowMsg(name, message, string.Empty);
}
}
#pragma warning restore IDE0059, CS0168
public override CommandResult Invoke()
{
try
{
LaunchElevated(_id, _profile);
}
catch
{
// TODO: We need to figure out some logging
}
return CommandResult.KeepOpen();
}
}

View File

@@ -52,6 +52,9 @@ internal sealed partial class ProfilesListPage : ListPage
{
Title = profile.Name,
Subtitle = profile.Terminal.DisplayName,
MoreCommands = [
new CommandContextItem(new LaunchProfileAsAdminCommand(profile.Terminal.AppUserModelId, profile.Name, true, false)),
],
// Icon = () => GetLogo(profile.Terminal),
// Action = _ =>