我经常需要启动外部进程,所以我写了一个方便的方法来轻松实现。其中一个进程需要触发UAC以询问用户是否允许。我做了一些研究,发现除了将Verb
设置为ProcessStartInfo
之外,将runas
对象的UseShellExecute
属性设置为true
应该可以解决问题。
private static void StartProcess(string fileName, string arguments, bool elevated)
{
var start = new ProcessStartInfo
{
UseShellExecute = false,
CreateNoWindow = true,
Arguments = arguments,
FileName = fileName
};
if (elevated)
{
start.Verb = "runas";
start.UseShellExecute = true;
}
int exitCode = 0;
using (var proc = new Process { StartInfo = start })
{
proc.Start();
proc.WaitForExit();
exitCode = proc.ExitCode;
}
if (exitCode != 0)
{
var message = string.Format(
"Error {0} executing {1} {2}",
exitCode,
start.FileName,
start.Arguments);
throw new InvalidOperationException(message);
}
}
但是Verb
属性在netcore
中不可用,因此我无法弄清楚如何获得相同的结果。有什么建议吗?