1

在异步运行进程之前,我需要我的应用程序需要管理员权限。它曾经与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;
}

你知道如何解决这个问题吗?

4

1 回答 1

1

通过在另一台计算机上运行它,我了解到上述代码确实按预期工作:在执行异步进程之前,它会触发 Windows UAC 弹出窗口,要求用户授予应用程序更改设备的权限。

由于完全禁用了用户帐户控制,因此从未在我的 Windows 机器上触发弹出窗口,这从一开始就不是一个明智的选择......

于 2021-04-16T14:19:12.617 回答