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"

Était-ce utile?

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:

  

message d'erreur « Le nom du répertoire est non valide » lorsque vous démarrez cmd.exe ou Notepad.exe en utilisant Exécuter en tant que fonctionnalité dans Windows

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 ».

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top