Как исправить ошибку «COMException: требуемая привилегия не удерживается клиентом» в C #? - PullRequest
0 голосов
/ 29 июня 2019

Я работаю над удаленным управлением компьютером через WMI с использованием C #. Я могу подключиться после того, как произвел необходимые настройки на удаленном компьютере. Пока нет проблем. Но когда я выключил удаленный компьютер с помощью команды Win32ShutDown, после перезагрузки удаленного компьютера я получил следующую ошибку:

System.Runtime.InteropServices.COMException (0x80070522): требуемая привилегия не удерживается клиентом. (Исключение из HRESULT: 0x80070522).

Как я могу решить это?

Моя функция подключения:

    public static ManagementScope Connect(string ip, string userName = "", string password = "")
    {
        ManagementScope scope = null;
        try
        {
            ConnectionOptions opts;
            scope = new ManagementScope(string.Format("\\\\{0}\\root\\cimv2", ip.Trim()));

            if (!string.IsNullOrEmpty(userName))
            {
                opts = new ConnectionOptions
                {
                    Username = userName,
                    Password = password,
                    EnablePrivileges = true,
                    Impersonation = ImpersonationLevel.Impersonate
                };
                scope.Options = opts;
            }
            scope.Connect(); //Error is thrown here
            return scope;
        }
        catch (Exception ex)
        {
            scope = null;
            throw ex;
        }
    }

Моя функция отключения:

    static void ShutDown()
    {
        try
        {
            ConnectionOptions options = new ConnectionOptions
            {
                Username = "Administrator",
                Password = "123",
                EnablePrivileges = true,
                Impersonation = ImpersonationLevel.Impersonate                     
            };
            ManagementScope scope = new ManagementScope(string.Format("\\\\{0}\\root\\cimv2", "192.168.1.50", options));
            scope.Connect(); //Error is thrown here

            ManagementClass mcWin32 = new ManagementClass("Win32_OperatingSystem") { Scope = scope };
            mcWin32.Get();

            ManagementBaseObject mboShutdownParams = mcWin32.GetMethodParameters("Win32Shutdown");
            mboShutdownParams["Flags"] = 5;

            ManagementBaseObject mboShutdown = null;
            foreach (ManagementObject manObj in mcWin32.GetInstances())
            {
                mboShutdown = manObj.InvokeMethod("Win32Shutdown", mboShutdownParams, null);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }
        finally
        {
            Console.ReadLine();
        }
     }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...