ManagementClass (.NET) с олицетворением / делегированием работает на всех удаленных машинах, но не работает на локальной машине - PullRequest
0 голосов
/ 08 марта 2019

При запуске процессов на удаленных машинах, где указанные процессы должны запускаться под определенной учетной записью домена Windows, я использую код, подобный следующему:

new ManagementClass(
    new ManagementScope(
        String.Format("\\\\{0}\\root\\cimv2","machine_name"),
        new ConnectionOptions{
            Username="username",
            Password="password",
            Impersonation=ImpersonationLevel.Delegate,
            Authentication= AuthenticationLevel.Default,
            EnablePrivileges=false
        }
    ),
    new ManagementPath("Win32_Process"),
    null
).InvokeMethod("Create",new String[]{"process_name.exe"});

Это работает нормально, но выдает исключение при попыткезапустить процесс на локальном компьютере, то есть на том же компьютере, на котором запущен код запуска .Сообщение об ошибке совершенно ясно относительно характера проблемы: System.Management.ManagementException: User credentials cannot be used for local connections

Конечно, обнуление полей имени пользователя и пароля позволяет успешно завершить вызов.

До сих пор это ограничение не устранялось.Это действительно было проблемой, потому что, как оказалось, когда мне нужно запустить процесс на локальной машине, я не против, чтобы он работал под той же учетной записью, что и мой код запуска.Поэтому логика программы определяет, нацелены ли мы на локальный компьютер или нет, и если да, просто обнуляет имя пользователя и пароль.

Как вы уже догадались, я сейчас нахожусь вситуация, когда мне нужно запустить процесс на локальном компьютере, используя другую учетную запись Windows с известным именем пользователя / паролем.Но я не уверен, как преодолеть это странное ограничение невозможности использовать ManagementScope локальной машины вместе с именем пользователя / паролем.

Я могу выполнить это с помощью Process.Start (), конечно,но мне стало ясно, что использование ManagementClass является предпочтительным вариантом действий в этом проекте.

В 2011 году у этого парня была похожая проблема в совершенно ином контексте,но, как видно из комментариев, предлагаемые действия не помогают.

Есть ли обходные пути?

...