Я пытаюсь выполнить пакетный файл, используя класс Process. Этот код находится в середине большей части кода, где я использую LogonUser() и WindowsIdentity.Impersonate() для олицетворения локальной учетной записи администратора ПК.
Я пытался запустить пакетный файл в процессе, не добавляя учетные данные в ProcessStartInfo, но это привело к тихому сбою пакетного файла - никаких ошибок не возникало, и ожидаемый результат из пакетного файла никогда не возвращался (я читаю stderr и stdout асинхронно, между прочим).
Затем я добавил учетные данные в ProcessStartInfo, но теперь я получаю сообщение об ошибке «Отказано в доступе», если я сначала не вызываю WindowsImpersonationContext.Undo(), и «Ошибка входа в систему: неизвестное имя пользователя или неверный пароль», если я вызываю .Undo () перед Process.Start(). Я трижды проверил правильность имени пользователя/пароля/домена для нескольких учетных записей.
Если в моем коде нет вызовов LogonUser() или WindowsIdentity.Impersonate() (и нет учетных данных в ProcessStartInfo), то у меня нет проблем с выполнением пакетного файла и выходом из захваченного пакетного файла.
Я могу успешно запустить пакетный файл с рабочего стола либо в качестве локального администратора, либо в качестве произвольной локальной учетной записи пользователя. Я вижу, что его разрешения показывают, что он должен быть доступен для чтения/исполнения из учетных записей, которые я пытаюсь запустить. Это действительно довольно глупо; любая помощь приветствуется.