C#:当用户拒绝授予提升的权限时如何捕获异常?
C#: How to catch the exception when user refuses to grant elevated privileges?
在我的 C# 代码中大致是这样的:
public void RunCommand()
{
var processStartInfo = new ProcessStartInfo(
"notepad.exe")
{
UseShellExecute = true,
Verb = "Runas",
};
var process = Process.Start(processStartInfo);
process.WaitForExit(1000);
}
当 运行 时,这会提示用户授予提升的权限。如果用户拒绝,调用将抛出 Win32Exception 和文本 "The operation was cancelled by the user"。
我想专门捕获这个异常,即将它和其他异常区分开来。我想知道用户已经取消了。
我能有理由相信当抛出 Win32Exception 时,可能是这个吗?还是调用会因各种其他原因抛出 Win32Exception?我不想在错误消息上开始字符串匹配,因为这可能因用户设置而异...
我最终这样做了,这似乎适用于我的系统:
public void RunCommand()
{
var processStartInfo = new ProcessStartInfo(
"notepad.exe")
{
UseShellExecute = true,
Verb = "Runas",
};
var process = Process.Start(processStartInfo);
process.WaitForExit(1000);
}
catch (Win32Exception e)
{
if (e.ErrorCode == 1223 || e.ErrorCode == -2147467259)
// Throw easily recognizable custom exception.
throw new ElevatedPermissionsDeniedException("Unable to get elevated privileges", e);
else
throw;
}
在我的 C# 代码中大致是这样的:
public void RunCommand()
{
var processStartInfo = new ProcessStartInfo(
"notepad.exe")
{
UseShellExecute = true,
Verb = "Runas",
};
var process = Process.Start(processStartInfo);
process.WaitForExit(1000);
}
当 运行 时,这会提示用户授予提升的权限。如果用户拒绝,调用将抛出 Win32Exception 和文本 "The operation was cancelled by the user"。
我想专门捕获这个异常,即将它和其他异常区分开来。我想知道用户已经取消了。
我能有理由相信当抛出 Win32Exception 时,可能是这个吗?还是调用会因各种其他原因抛出 Win32Exception?我不想在错误消息上开始字符串匹配,因为这可能因用户设置而异...
我最终这样做了,这似乎适用于我的系统:
public void RunCommand()
{
var processStartInfo = new ProcessStartInfo(
"notepad.exe")
{
UseShellExecute = true,
Verb = "Runas",
};
var process = Process.Start(processStartInfo);
process.WaitForExit(1000);
}
catch (Win32Exception e)
{
if (e.ErrorCode == 1223 || e.ErrorCode == -2147467259)
// Throw easily recognizable custom exception.
throw new ElevatedPermissionsDeniedException("Unable to get elevated privileges", e);
else
throw;
}