【发布时间】:2021-06-23 10:45:38
【问题描述】:
在异步运行进程之前,我需要我的应用需要管理员权限。它曾经与 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;
}
你知道如何解决这个问题吗?
【问题讨论】:
标签: c# windows async-await process admin-rights