Win32Exception: Der Verzeichnisname ist ungültig
-
13-09-2019 - |
Frage
Ich versuche, einen Prozess als einen anderen Benutzer auszuführen, die Administrator-Berechtigung in 2 verschiedenen Computern unter Vista und ihre UAC aktiviert, aber in einem von ihnen, dass ich eine Win32Exception bekommen hat, das „der Verzeichnisname ist ungültig“
Kann mir jemand sagen, was mit meinem Code falsch ist?
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
Die Anwendung, die den obigen Code ausführt, hat requireAdministrator Ausführungsebene. Ich selbst gesetzt den Arbeitsordner auf "Path.GetDirectoryName (myFile)" und "New System.IO.FileInfo (myFile) .DirectoryName"
Lösung 4
Es ist, weil die Pfadlänge der Datei 255 Zeichen überschreitet.
Andere Tipps
Sie müssen die WorkingDirectory
Eigenschaft ProcessStartInfo` angeben. Aus Win32Exception Fehlercode 267 „der Verzeichnisname ist ungültig“
Im Moment arbeite ich an einem „automatisierten Ausführen als“ Werkzeug. Sein Ziel ist es hilft Administratoren, die, wie ich, haben die Nutzer eine Möglichkeit zu geben, auszuführen ein oder zwei Programme als Administrator und möchten, dies zu tun, ohne mit einem Administrator-Passwort zu übergeben.
Also, ich auf Vista bin zu entwickeln und ich peitschte nur einen kleinen Beweis Konzept Prototyp, das würde laufen calc.exe als ein anderer Benutzer, mit Process und zu verarbeiten. Das funktionierte gut, wenn ich es ausgeführt als ich (eine ziemlich sinnlose Übung, ich zugeben muß), aber wenn ich erstellt ein neuer Benutzer und versucht, es als ihn laufen zu lassen, stieß ich auf ein Win32Exception beschweren, dass der Verzeichnisname ist ungültig, nativer Fehlercode 267. Ich war instsantly verwirrt, da ich von keinem gelieferten wusste Verzeichnisnamen, die ungültig sein könnte. Getestet habe ich dann den Code auf einem XP Maschine und es hat funktioniert!
fing ich an es googeln ohne Erfolg, viele Berichte über diesen Fehler, aber keine schlüssige Lösung oder auf unterschiedliche Kontexten. Schließlich, nach einer während es mir dämmerte, wurde die Angabe ich nicht die Working Eigentum der Process Klasse, sobald ich die Zeilen
hinzugefügtFileinfo fileinfo = new Fileinfo (path); startInfo.WorkingDirectory = fileInfo.DirectoryName;
Zu meinem Code, war es erlaubt, Code auszuführen, wie anders als angemeldet Benutzer. ...
Versuchen Sie ersetzen
pInfo.WorkingDirectory = New System.IO.FileInfo(myFile).DirectoryName;
mit
pInfo.WorkingDirectory = Path.GetDirectoryName(myFile);
Die Fileinfo einen Zugriff auf das Dateisystem, und ich würde nur der Admin-Benutzer hat in dieses Verzeichnis Zugriff übernehmen. Wenn es Ihr Problem nicht lösen, zumindest wird es Ihren Code ein klein wenig schneller machen ...
Ist das Verzeichnis des angemeldeten Benutzers des abgebildeten Home-Ordner oder unter dem? Als diese Knowledge Base-Artikel helfen können:
Update: Bitte beachten Sie, dass sein Mitglied der Lokale Administratoren Gruppe und mit Administratorrechten auf Vista nicht gleich sind.
Ich nehme an, dass alles funktioniert gut, wenn Sie Ihre C # Anwendung als Administrator ausführen. Rechtsklicken Sie auf die ausführbare Datei, und wählen Sie Als Administrator ausführen , oder die Anwendung von einer erhöhten Eingabeaufforderung starten (der schnellste Weg, um eins zu bekommen ist durch Drücken von Start , geben Sie ‚cmd ", gefolgt von Ctrl+Shift+Return
).
Oder als Alternative deaktivieren UAC für das Konto, das Verfahren ausgeführt wird.
Es ist Platz in dem Ordnernamen fällig. Sobald ich den Raum entfernte es begann Datei zu arbeiten, wenn ich dieses Problem betroffen.
Ich hatte ein ähnliches Erlebnis und es stellte sich heraus, ein Problem mit unserer Entwicklungsumgebung sein. Wir bilden unser Quellcode-Verzeichnis zu einem virtuellen Laufwerk mit dem Befehl subst. So sind die Dateinamen und Working Eigenschaften wurden auf "W: \ SomeFolder \ FileName.exe"
Wenn ich hartcodiert den Filenamen & Working die Dateien über meine eigentliche Festplatte zugreifen (C :), hörte ich die „Invalid Directory“ Ausnahme erhalten.