Win32Exception: Le nom du répertoire est invalide
-
13-09-2019 - |
Question
Je suis en train d'exécuter un processus en tant qu'utilisateur différent qui a des privilèges d'administrateur dans 2 différents ordinateurs exécutant Vista et leur UAC activé, mais dans l'un d'entre eux je reçois un Win32Exception qui dit: « Le nom de répertoire est incorrect »
Quelqu'un peut-il me dire ce qui ne va pas avec mon code?
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
L'application qui exécute le code ci-dessus a requireAdministrator niveau d'exécution. Je mets même le dossier de travail à "Path.GetDirectoryName (myFile)" et "New System.IO.FileInfo (myFile) .DirectoryName"
La solution 4
Il est parce que la longueur du chemin du fichier dépasse 255 caractères.
Autres conseils
Vous devez spécifier la propriété WorkingDirectory
de ProcessStartInfo`. De Win32Exception code d'erreur 267 « Le nom de répertoire est incorrect » :
Je travaille actuellement sur un outil « automatisé Exécuter en tant que ». Son objectif est aider les admins qui, comme moi, doivent donner aux utilisateurs un moyen d'exécuter un ou deux programmes en tant qu'administrateur et que vous souhaitez le faire sans avoir à rendre le mot de passe d'un administrateur.
Alors, je développe sur Vista et je viens fouetté une petite preuve de prototype de concept, qui se sauverait calc.exe en tant qu'utilisateur différent, en utilisant ProcessStartInfo et processus. Cela a bien fonctionné quand je l'exécutaient comme moi-même (un exercice plutôt inutile, je dois avouer), mais quand je créé un nouvel utilisateur et a essayé de courir comme lui, je suis tombé sur un Win32Exception plaint que le nom de répertoire est incorrect, natif code d'erreur 267. J'étais instsantly déconcerté, comme je ne connaissais pas fourni nom du répertoire qui pourrait être invalide. Je puis testé le code sur un XP machine et cela a fonctionné!
J'ai commencé googler sur elle en vain, de nombreux rapports de cette erreur, mais aucune solution concluante, ou sur des contextes différents. Enfin, après une alors qu'il me vint à l'esprit, je ne le WorkingDirectory spécifiant propriété de la classe ProcessStartInfo, dès que j'ajouté les lignes
FileInfo FileInfo = new FileInfo (path); startInfo.WorkingDirectory = fileInfo.DirectoryName;
A mon code, il a été autorisé à exécuter du code comme différent de celui connecté utilisateur. ...
Essayez de remplacer
pInfo.WorkingDirectory = New System.IO.FileInfo(myFile).DirectoryName;
avec
pInfo.WorkingDirectory = Path.GetDirectoryName(myFile);
Le fait FileInfo un accès au système de fichiers, et je suppose que l'utilisateur admin a accès à ce répertoire. Si cela ne résout pas votre problème, au moins il fera votre code un tout petit peu plus vite ...
Le répertoire du dossier personnel de l'utilisateur connecté sur cartographié ou en dessous? Que cet article de base de connaissances pourrait aider:
Mise à jour: S'il vous plaît noter que étant membre du Administrateurs local groupe et ayant des privilèges d'administration ne sont pas les mêmes sur Vista.
Je suppose que tout fonctionne bien lorsque vous exécutez votre application C # en tant qu'administrateur. Cliquez droit sur l'exécutable, puis choisissez Exécuter en tant qu'administrateur , ou démarrer l'application à partir d'une invite de commande élevée (la plus rapide pour obtenir un est en appuyant sur Démarrer , ENTRER « cmd »suivie Ctrl+Shift+Return
).
Ou, comme alternative, désactiver l'UAC pour le compte en cours d'exécution de ce processus.
Il est dû à l'espace dans le nom du dossier. Une fois que je l'ai enlevé l'espace, il a commencé fichier de travail quand je frappe cette question.
J'ai eu une expérience similaire et il est avéré être un problème avec notre environnement de développement. Nous identifions notre annuaire de code source à un lecteur virtuel en utilisant la commande subst. Ainsi, les propriétés et WorkingDirectory FileName étaient réglés sur "W: \ unDossier \ FileName.exe"
Quand je Codés en dur le FileName et WorkingDirectory pour accéder aux fichiers via mon disque réel (C :), je me suis arrêté à recevoir l'exception « répertoire non valide ».