Почему олицетворение процесса возвращает "Недопустимое имя каталога"?
У меня есть процесс, который должен работать с правами администратора. Мне нужен средний joe для запуска процесса, но я не хочу давать всем доступ... поэтому я создал простой класс, который будет запускать эту ОДНУ задачу как администратор, используя олицетворение.
Код очень прост, но я не могу понять, почему это происходит сбой. ПОМОГИТЕ??!!
Я запускаю это через командный файл, и я даже скопировал файл, который должен быть выполнен, на локальный жесткий диск, думая, что это может быть проблема с разрешением для запуска приложения по сети.
public static Process ImpersonateProcess(string exe, string args, string Username, string Password) { ProcessStartInfo psi = new ProcessStartInfo(exe); psi.Arguments = args; psi.UseShellExecute = false; psi.UserName = Username; psi.Password = new SecureString(); foreach (char c in Password.ToCharArray()) { psi.Password.AppendChar(c); } Process proc = null; Console.WriteLine("starting..."); proc = Process.Start(psi); Console.WriteLine("started"); return proc; }
В приведенном выше коде я никогда не получаю "запущен". Он выдает ошибку в Process.Start(psi) и с сообщением об ошибке "имя каталога недопустимо".
1 ответ
Это может быть потому, что вы не устанавливаете свойство WorkingDirectory. Согласно документам:
Важная заметка:
Свойство WorkingDirectory должно быть установлено, если указаны имя пользователя и пароль. Если свойство не установлено, рабочим каталогом по умолчанию является%SYSTEMROOT%\system32.