如何解决如何在管理模式下异步运行进程?
在异步运行进程之前,我需要我的应用程序需要管理员权限。它曾经与 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 机器上从未触发弹出窗口,因为用户帐户控制被完全禁用,这不是一个明智的选择...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。