如何在管理模式下 运行 异步处理一个进程?
How to run a process asynchronously in administration mode?
我需要我的应用程序在 运行异步进程之前需要管理员权限。它曾经在 app.manifest:
中与以下配置配合使用效果很好
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
但是,由于现在添加了不需要管理员权限的进程 运行,这个优雅的解决方案不再有效。我希望这样做可以解决问题:
process.StartInfo.UseShellExecute = true;
process.StartInfo.Verb = "runas";
这就是我所拥有的,但一定是某处有错误,因为这段代码 运行 是预期的过程,但实际上并不需要管理员权限才能这样做:
public async Task ExecuteElevatedProcessAsync(string executablePathArg)
{
using (var process = new Process())
{
process.StartInfo.FileName = executablePathArg;
process.StartInfo.UseShellExecute = true;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.Verb = "runas";
await RunAsync(process);
};
}
private Task RunAsync(Process processArg)
{
var taskCompletionSrc = new TaskCompletionSource<object>();
processArg.EnableRaisingEvents = true;
processArg.Exited += (s, e) => taskCompletionSrc.TrySetResult(null);
if (!processArg.Start())
{
taskCompletionSrc.SetException(new Exception("Some descriptive error-message."));
}
return taskCompletionSrc.Task;
}
你知道如何解决这个问题吗?
通过 运行 它在另一台计算机上我了解到 上面的代码确实按预期工作:在执行异步过程之前,它触发 Windows UAC 弹出窗口要求用户授予应用更改设备的权限。
弹出窗口从未在我的 Windows 机器上触发,因为用户帐户控制被完全禁用,这不是开始的明智选择...
我需要我的应用程序在 运行异步进程之前需要管理员权限。它曾经在 app.manifest:
中与以下配置配合使用效果很好 <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
但是,由于现在添加了不需要管理员权限的进程 运行,这个优雅的解决方案不再有效。我希望这样做可以解决问题:
process.StartInfo.UseShellExecute = true;
process.StartInfo.Verb = "runas";
这就是我所拥有的,但一定是某处有错误,因为这段代码 运行 是预期的过程,但实际上并不需要管理员权限才能这样做:
public async Task ExecuteElevatedProcessAsync(string executablePathArg)
{
using (var process = new Process())
{
process.StartInfo.FileName = executablePathArg;
process.StartInfo.UseShellExecute = true;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.Verb = "runas";
await RunAsync(process);
};
}
private Task RunAsync(Process processArg)
{
var taskCompletionSrc = new TaskCompletionSource<object>();
processArg.EnableRaisingEvents = true;
processArg.Exited += (s, e) => taskCompletionSrc.TrySetResult(null);
if (!processArg.Start())
{
taskCompletionSrc.SetException(new Exception("Some descriptive error-message."));
}
return taskCompletionSrc.Task;
}
你知道如何解决这个问题吗?
通过 运行 它在另一台计算机上我了解到 上面的代码确实按预期工作:在执行异步过程之前,它触发 Windows UAC 弹出窗口要求用户授予应用更改设备的权限。
弹出窗口从未在我的 Windows 机器上触发,因为用户帐户控制被完全禁用,这不是开始的明智选择...