Win32Exception: имя каталога неверно - PullRequest
13 голосов
/ 13 июня 2009

Я пытаюсь запустить процесс от имени другого пользователя с правами администратора на 2 разных компьютерах, работающих под управлением Vista и с включенным UAC, но на одном из них я получаю исключение Win32Exception, которое говорит: «Имя каталога недействительно»

Может кто-нибудь сказать мне, что не так с моим кодом?

var myFile = "D:\\SomeFolder\\MyExecutable.exe";
var workingFolder = "D:\\SomeFolder";
var pInfo = new System.Diagnostics.ProcessStartInfo();
pInfo.FileName = myFile;
pInfo.WorkingDirectory = workingFolder;
pInfo.Arguments = myArgs;
pInfo.LoadUserProfile = true;
pInfo.UseShellExecute = false;
pInfo.UserName = {UserAccount};
pInfo.Password = {SecureStringPassword};
pInfo.Domain = ".";

System.Diagnostics.Process.Start(pInfo);

UPDATE

Приложение, которое выполняет вышеуказанный код, имеет уровень выполнения requireAdministrator. Я даже установил для рабочей папки "Path.GetDirectoryName (myFile)" * и "New System.IO.FileInfo (myFile) .DirectoryName"

Ответы [ 6 ]

13 голосов
/ 01 августа 2014

Вам необходимо указать свойство WorkingDirectory ProcessStartInfo`. С Win32Exception код ошибки 267 «Неверное имя каталога» :

В настоящее время я работаю над инструментом "Automated Run As". Его цель помощь админам, которые, как и я, должны дать пользователям возможность выполнить одна или две программы в качестве администратора и хотели бы сделать это без необходимость сдать пароль администратора.

Итак, я занимаюсь разработкой для Vista, и я только что получил небольшое доказательство прототип концепции, который запускает calc.exe от имени другого пользователя, используя ProcessStartInfo и Process. Это работало нормально, когда я выполнил это как сам (довольно бессмысленное упражнение, я должен признать), но когда я создал новый пользователь и попытался запустить его, как он, я наткнулся на Win32Exception с жалобой на то, что имя каталога неверно, родное код ошибки 267. Я был непреклонно сбит с толку, так как знал, что не поставляется имя каталога, которое может быть недействительным. Затем я проверил код на XP машина и все заработало!

Я начал гуглить на нем безрезультатно, многие сообщения об этой ошибке, но нет окончательного решения, или в разных контекстах. Наконец, после хотя меня осенило, я не указывал WorkingDirectory свойство класса ProcessStartInfo, как только я добавлю строки

FileInfo fileInfo = новый FileInfo (путь); startInfo.WorkingDirectory = fileInfo.DirectoryName;

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

3 голосов
/ 13 июня 2009

Попробуйте заменить

pInfo.WorkingDirectory = New System.IO.FileInfo(myFile).DirectoryName;

с

pInfo.WorkingDirectory = Path.GetDirectoryName(myFile);

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

3 голосов
/ 13 июня 2009

Является ли каталог сопоставленной домашней папкой вошедшего в систему пользователя или ниже? Чем может помочь эта статья базы знаний:

Сообщение об ошибке «Имя каталога неверно» при запуске Cmd.exe или Notepad.exe с помощью функции «Запуск от имени» в Windows

Обновление: обратите внимание, что членство в группе Local Administrators и наличие административных привилегий не совпадают в Vista.

Я полагаю, что все работает нормально, когда вы запускаете приложение C # от имени администратора. Щелкните правой кнопкой мыши исполняемый файл, затем выберите Запуск от имени администратора или запустите приложение из командной строки с повышенными правами (самый быстрый способ получить его - нажать Пуск , ввести «cmd», а затем Ctrl+Shift+Return).

Или, в качестве альтернативы, отключите UAC для учетной записи, выполняющей этот процесс.

2 голосов
/ 09 августа 2011

У меня был похожий опыт, и это оказалось проблемой с нашей средой разработки. Мы сопоставляем наш каталог исходного кода с виртуальным диском с помощью команды subst. Поэтому свойства FileName и WorkingDirectory были установлены на «W: \ SomeFolder \ FileName.exe»

Когда я жестко запрограммировал FileName & WorkingDirectory для доступа к файлам через мой фактический диск (C :), я перестал получать исключение «Неверный каталог».

2 голосов
/ 09 декабря 2010

Это связано с пробелом в имени папки. Как только я удалил пробел, он начал работать файл, когда я столкнулся с этой проблемой.

2 голосов
/ 12 апреля 2010

Это потому, что длина пути файла превышает 255 символов.

...