2009-04-22 4 views
4

У меня есть процесс, который должен выполняться под административными привилегиями. Мне нужен средний joe для запуска процесса, но я не хочу предоставлять каждому доступ ... поэтому я создал простой класс, который будет запускать эту ОДНУ задачу в качестве администратора, используя олицетворение.Почему олицетворение процесса возвращает «Недопустимое имя каталога»?

Код VERY striaght-forward, но я не могу понять, почему это сбой. ПОМОГИТЕ??!!

Я запускаю это через пакетный файл, и я даже скопировал файл, который нужно выполнить на локальном жестком диске, считая, что это может быть проблема разрешения для запуска приложения по сети.

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) и с сообщением об ошибке «имя каталога недопустимо».

+0

Вы уверены, что имя exe, которое вы предоставили, является правильным? Вы можете распечатать его перед началом процесса и двойной проверки? – Grzenio

ответ

16

Возможно, это связано с тем, что вы не устанавливаете свойство WorkingDirectory. По документы:

Важное примечание:

WorkingDirectory свойство должно быть установлено, если имя пользователя и пароль предоставляются. Если свойство не установлено, рабочим каталогом по умолчанию является% SYSTEMROOT% \ system32.

+0

Я полностью пропустил этот маленький улов. =) СПАСИБО ОЧЕНЬ ОЧЕНЬ ОЧЕНЬ. Теперь это работает как шарм. Он работал, потому что здесь была проблема безопасности, где у каждого был доступ к системе32. Недавно они исправили это. – Jerry

Смежные вопросы