2009-06-13 13 views
9

Próbuję uruchomić proces jako inny użytkownik, który ma uprawnienia administratora na dwóch różnych komputerach z systemem Vista i ich UAC włączony, ale w jednym z nich otrzymuję wyjątek Win32Exception, który mówi: "Katalog nazwa jest nieprawidłowa "Win32Exception: nazwa katalogu jest nieprawidłowa

Czy ktoś może mi powiedzieć, co jest nie tak z moim kodem?

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

Aplikacja, która wykonuje powyższy kod ma poziom wykonania requireAdministrator. I nawet ustawić folder roboczy "Path.GetDirectoryName (myfile)" i "New System.IO.FileInfo (myfile) .DirectoryName"

+0

W jakim wierszu kodu występuje błąd? Czy jest to po utworzeniu obiektu FileInfo lub po uruchomieniu procesu? –

+0

@divo System.Diagnostics.Process.Start (pInfo) – mrtaikandi

+0

Możesz użyć Monitora Procesu (od Sysinternals), aby określić, która operacja pliku/folderu Win32 zawodzi. – Richard

Odpowiedz

2

Dzieje się tak, ponieważ długość ścieżki pliku przekracza 255 znaków.

+1

Dziękuję, to działało również dla mnie, miałem całą ścieżkę i nazwę pliku ustawioną w atrybucie filename, zamiast tego, umieść ścieżkę pod właściwością 'Working Directory', pozostaw właściwość filename tylko dla 'nazwy pliku'. – Dal

3

jest katalog zalogowanego katalogu domowym użytkownika lub odwzorowanym poniżej tego? Niż w tym artykule Bazy wiedzy może pomóc:

"The directory name is invalid" error message when you start Cmd.exe or Notepad.exe by using the Run as feature in Windows

Update: Proszę pamiętać, że bycie członkiem Administratorzy lokalni grupy i posiadające uprawnienia administracyjne nie są takie same na Vista.

Przypuszczam, że wszystko działa poprawnie po uruchomieniu aplikacji C# jako administrator. Kliknij plik wykonywalny prawym przyciskiem myszy, a następnie wybierz opcję Uruchom jako Administrator lub uruchom aplikację z wiersza polecenia z podwyższonym poziomem uprawnień (najszybszym sposobem uzyskania tego jest naciśnięcie klawisza Uruchom, wprowadź "cmd", a następnie Ctrl+Shift+Return).

Ewentualnie wyłącz UAC dla konta, na którym działa ten proces.

+0

Katalog jest normalnym katalogiem na dysku niesystemowym, który ma uprawnienie Pełna kontrola dla grupy Administratorzy. – mrtaikandi

+0

Aplikacja, która uruchamia drugi proces, wymaga poziomu wykonawczego administratora. Dlatego będzie działać jako administrator. – mrtaikandi

+0

Awesome ... dziękuję bardzo za udostępnienie tych informacji – JeeZ

3

Spróbuj zastąpić

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

z

pInfo.WorkingDirectory = Path.GetDirectoryName(myFile); 

FileInfo czyni dostęp do systemu plików, a ja tylko przypuszczać użytkownik Admin ma dostęp do tego katalogu. Jeśli to nie rozwiąże problemu, to przynajmniej sprawi, że twój kod będzie trochę szybszy ...

+0

Nie rozwiązuje problemu. Podałem nawet adres statyczny. – mrtaikandi

2

Powodem jest spacja w nazwie folderu. Po usunięciu miejsca zaczęło działać plik, gdy trafię w ten problem.

2

Miałem podobne doświadczenie i okazało się, że jest to problem związany z naszym środowiskiem programistycznym. Mapujemy nasz katalog kodu źródłowego na dysk wirtualny za pomocą polecenia subst. Tak więc właściwości FileName i WorkingDirectory były ustawione na "W: \ SomeFolder \ FileName.exe"

Kiedy zakodowałem na sztywno FileName & WorkingDirectory, aby uzyskać dostęp do plików przez mój faktyczny dysk (C :), przestałem odbierać Wyjątek "Nieprawidłowy katalog".

10

Należy podać właściwość WorkingDirectory obiektu ProcessStartInfo`.Od Win32Exception error code 267 "The directory name is invalid":

Obecnie pracuję nad narzędziem "Automated Run As". Jego celem jest pomaganie administratorom, którzy, tak jak ja, muszą zapewnić użytkownikom środki do wykonania jednego lub dwóch programów jako Administrator i chcieliby to zrobić bez konieczności podawania hasła administratora przez .

Pracuję nad Vistą i właśnie opracowałem mały prototyp koncepcyjny o nazwie , który uruchamia calc.exe jako inny użytkownik, używając ProcessStartInfo and Process. To działało bez zarzutu, gdy sam go wykonałem (raczej bezsensowne ćwiczenie, muszę przyznać), ale kiedy stworzyłem nowego użytkownika i próbowałem uruchomić go jako niego, natknąłem się na Win32Exception narzekając, że nazwa katalogu jest nieprawidłowa , natywny kod błędu 267. Byłem niezmiernie zaskoczony, ponieważ nie znałem podanej nazwy katalogu, która mogłaby być nieprawidłowa. Następnie przetestowałem kod na maszynie XP i zadziałało!

Zacząłem googlować na tym bez rezultatu, wiele zgłoszeń tego błędu, ale nie było rozstrzygającego rozwiązania lub w różnych kontekstach. Wreszcie, po gdy dotarło do mnie, ja nie określając właściwość klasy ProcessStartInfo WorkingDirectory , jak tylko dodałem linie

FileInfo Fileinfo = new FileInfo (path); startInfo.WorkingDirectory = fileInfo.DirectoryName;

Do mojego kodu można było uruchomić kod inny niż zalogowany użytkownik użytkownik. ...

Powiązane problemy