Почему олицетворение процесса возвращает "Недопустимое имя каталога"?

У меня есть процесс, который должен работать с правами администратора. Мне нужен средний 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.

Другие вопросы по тегам