C#: Как отловить исключение, когда пользователь отказывается предоставить повышенные привилегии? - PullRequest
1 голос
/ 21 января 2020

В моем C# коде у меня примерно так:

    public void RunCommand()
    {
        var processStartInfo = new ProcessStartInfo(
            "notepad.exe")
        {
            UseShellExecute = true,
            Verb = "Runas",
        };
        var process = Process.Start(processStartInfo);
        process.WaitForExit(1000);
    }

При запуске это побуждает пользователя предоставить повышенные привилегии. Если пользователь отказывается, вызов вызывает Win32Exception с текстом «Операция была отменена пользователем».

Я хочу специально отловить это исключение, т. Е. Отличить его от других исключений. Я хочу быть в состоянии узнать, что пользователь отменил.

Могу ли я быть достаточно уверенным в том, что когда выбрасывается Win32Exception , возможно, это так? Или вызов может бросить Win32Exception по разным причинам? Я не хочу начинать сопоставление строк в сообщении об ошибке, поскольку оно предположительно зависит от пользовательских настроек ...

1 Ответ

1 голос
/ 22 января 2020

Я закончил тем, что сделал это, что, кажется, работает на моей системе:

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