Win32Exception: Le nom du répertoire est pas valide
Je suis en train de lancer un processus en tant qu'un autre utilisateur disposant des privilèges d'Administrateur dans les 2 ordinateurs différents sous Vista et leur UAC activé, mais dans l'un d'eux je reçois un Win32Exception qui dit que "Le nom du répertoire est pas valide"
Quelqu'un peut me dire quel est le problème 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);
Mise à JOUR
L'application qui s'exécute le code ci-dessus a requireAdministrator niveau de l'exécution.
J'ai même mis le dossier de travail pour "Chemin d'accès.GetDirectoryName(myFile)" et "Nouveau Système.IO.FileInfo(myFile).Répertoire"
Dans quelle ligne de code l'erreur se produit? Est-il lorsque vous créez l'objet FileInfo ou lorsque vous démarrez le processus?
Système.Diagnostics.Processus.Start(pInfo)
Vous pouvez utiliser le Moniteur de Processus (de Sysinternals) afin de déterminer les sous-jacents de fichier Win32/dossier de l'opération est un échec.
Par ailleurs, vous pouvez utiliser un littéral de chaîne pour éviter d'avoir à s'échapper des barres obliques dans les chemins d'accès, par exemple,
Si votre Mondossier chemin d'accès contient des Program Files (x86) dossier, Visual studio ou un autre outil mystiquement supprime un espace entre " s " et " ("et "Program Files(x86)". Peut-être vous avez raté cette faute de frappe
Système.Diagnostics.Processus.Start(pInfo)
Vous pouvez utiliser le Moniteur de Processus (de Sysinternals) afin de déterminer les sous-jacents de fichier Win32/dossier de l'opération est un échec.
Par ailleurs, vous pouvez utiliser un littéral de chaîne pour éviter d'avoir à s'échapper des barres obliques dans les chemins d'accès, par exemple,
var myFile = @"D:\SomeFolder\MyExecutable.exe";
.Si votre Mondossier chemin d'accès contient des Program Files (x86) dossier, Visual studio ou un autre outil mystiquement supprime un espace entre " s " et " ("et "Program Files(x86)". Peut-être vous avez raté cette faute de frappe
OriginalL'auteur mrtaikandi | 2009-06-13
Vous devez vous connecter pour publier un commentaire.
Vous devez spécifier le
WorkingDirectory
propriété de ProcessStartInfo`. De Win32Exception code d'erreur 267 "Le nom du répertoire est pas valide":OriginalL'auteur Chandler
Essayer de remplacer
avec
La FileInfo effectue un accès au système de fichiers, et je suppose que seul l'utilisateur admin a accès à ce répertoire. Si cela ne résout pas votre problème, au moins il fera de votre code un tout petit peu plus vite...
OriginalL'auteur chris166
Est le répertoire de l'utilisateur connecté est mappé dossier d'accueil ou en dessous? Que cet article de base de connaissances qui pourraient vous aider:
Mise à jour: Veuillez noter que le fait d'être membre de la Administrateurs Locaux groupe et de disposer de droits d'administrateur 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 de démarrer l'application à partir d'une invite de commande élevée (le moyen le plus rapide pour en obtenir un est en appuyant sur Commencer, entrez "cmd", suivie par
Ctrl+Shift+Return
).Ou, comme alternative, désactiver le contrôle de compte d'utilisateur pour le compte de l'exécution de ce processus.
L'application qui s'exécute le deuxième processus a requireAdministrator niveau de l'exécution. À cet effet, il sera exécuter en tant qu'administrateur.
Génial ... merci beaucoup pour le partage de l'information
"...désactiver le contrôle de compte d'utilisateur pour le compte de l'exécution de ce processus" - quand vous commencez à faire que, de son quasi impossible de revenir en arrière. Ses comme traverser vers le côté obscur.
OriginalL'auteur Dirk Vollmar
C'est parce que la longueur de chemin d'accès du fichier dépasse 255 caractères.
OriginalL'auteur mrtaikandi
C'est en raison de l'espace dans le nom du dossier. Une fois que j'ai enlevé l'espace qu'il a commencé à travailler fichier quand je l'ai touché à cette question.
OriginalL'auteur Alto
J'ai eu une expérience similaire et il s'est avéré être un problème avec notre environnement de développement. Nous traçons notre répertoire de code source sur un lecteur virtuel à l'aide de la commande subst. Si le nom de fichier et WorkingDirectory propriétés "W:\SomeFolder\FileName.exe"
Quand j'ai codé en dur le nom de fichier & WorkingDirectory pour accéder aux fichiers via mon disque (C:), j'ai cessé de recevoir le "Répertoire non Valide" l'exception".
OriginalL'auteur Walt D.