Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在管理模式下异步运行进程?_C#_Windows_Async Await_Process_Admin Rights - Fatal编程技术网

C# 如何在管理模式下异步运行进程?

C# 如何在管理模式下异步运行进程?,c#,windows,async-await,process,admin-rights,C#,Windows,Async Await,Process,Admin Rights,我需要我的应用程序在异步运行进程之前需要管理员权限。它过去在app.manifest中与以下配置配合良好: <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 这就是我所拥有的,但肯定有一个错误,因为这段代码按预期运行流程,但实际上并不需要管理员权限: public async Task ExecuteElevatedProcessAsync(s

我需要我的应用程序在异步运行进程之前需要管理员权限。它过去在app.manifest中与以下配置配合良好:

 <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
这就是我所拥有的,但肯定有一个错误,因为这段代码按预期运行流程,但实际上并不需要管理员权限:

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;
}

公共异步任务ExecuteElevatedProcessAsync(字符串executablePathArg)
{
使用(var进程=新进程())
{
process.StartInfo.FileName=executablePathArg;
process.StartInfo.UseShellExecute=true;
process.StartInfo.CreateNoWindow=true;
process.StartInfo.Verb=“runas”;
等待RunAsync(进程);
};
}
专用任务RunAsync(进程processArg)
{
var taskCompletionSrc=new TaskCompletionSource();
processArg.EnableRaisingEvents=true;
processArg.Exited+=(s,e)=>taskCompletionSrc.TrySetResult(null);
如果(!processArg.Start())
{
taskCompletionSrc.SetException(新异常(“一些描述性错误消息”);
}
返回taskCompletionSrc.Task;
}

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

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

弹出窗口从未在我的Windows计算机上触发,因为用户帐户控制被完全禁用,这不是一个明智的选择开始

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;
}