2017-07-31 2 views
1

Je travaille actuellement avec reg.exe et je suis en train de créer un processus avec reg.exe comme Process.FileName.Autre façon de placer un chemin entre guillemets lors de l'utilisation de DirectoryInfo?

Lorsque je tente d'exécuter reg.exe comme suit

REG EXPORT HKLM\\SOFTWARE\\Intel\\IntelAMTUNS D:\\Backups\\Test.reg 

everthing fonctionne très bien.

Mais dès que je tente de l'exécuter comme celui-ci

REG EXPORT HKLM\\SOFTWARE\\Intel\\IntelAMTUNS D:\\Backups\\Backup folder 1\\Test.reg 

rien ne se passe - et je sais pourquoi! Le chemin cible n'est pas mis entre guillemets. Dès que je fais cela, tout fonctionne bien à nouveau.

Mon problème maintenant est que je gère tous mes chemins de fichiers et dossiers comme des instances de DirectoryInfo. Lorsque je passe le chemin avec des guillemets sous forme de chaîne, par ex. comme ça

DirectoryInfo targetFolder = new DirectoryInfo("\"D:\\Backups\\Backup folder 1\\Test.reg\"") 

Je reçois instantanément une exception en me disant que le format de chemin donné est pas pris en charge.

Est-il possible de placer le chemin entre guillemets et de continuer à utiliser DirecotryInfo? J'ai vraiment besoin de mettre mon chemin entre guillemets - sinon la commande ne fonctionnera pas.

Voici quelques exemples de code:

DirectoryInfo backupPath = new DirectoryInfo("D:\\Backups\\Backup folder 1\\Test.reg"); 

Process process = new Process(); 
ProcessStartInfo startInfo = new ProcessStartInfo(); 

startInfo.FileName = "reg.exe"; 
startInfo.CreateNoWindow = true; 
startInfo.Arguments = "REG EXPORT HKLM\\SOFTWARE\\Intel\\IntelAMTUNS " + backupPath.FullName; 

process.StartInfo = startInfo; 
process.Start(); 
process.WaitForExit(); 

Quand je lance ce code, rien ne se passe - ni des erreurs ou des exceptions. Le fichier .reg lui-même n'est pas créé non plus.

Lorsque je tente de l'exécuter comme celui-ci

DirectoryInfo backupPath = new DirectoryInfo("\"D:\\Backups\\Backup folder 1\\Test.reg\""); 

Process process = new Process(); 
ProcessStartInfo startInfo = new ProcessStartInfo(); 

startInfo.FileName = "reg.exe"; 
startInfo.CreateNoWindow = true; 
startInfo.Arguments = "REG EXPORT HKLM\\SOFTWARE\\Intel\\IntelAMTUNS " + backupPath.FullName; 

process.StartInfo = startInfo; 
process.Start(); 
process.WaitForExit(); 

Je reçois System.NotSupportedException me disant « Le format de chemin donné est pas pris en charge. » Mais je vraiment besoin de mettre le chemin entre guillemets - sinon la commande elle-même ne fonctionne pas ...

+0

arn't vous manque un devis de clôture dans le chemin? – AssaultingCuccos

+0

Édité et a également ajouté la citation de fermeture! –

Répondre

1

vous ajoutez des citations au mauvais endroit: constructeur de DirectoryInfo les privera de toute façon de normaliser le chemin, de sorte que vous pouvez sauter les ajouter:

var backupPath = new DirectoryInfo("D:\\Backups\\Backup folder 1\\Test.reg"); 

Vous pouvez forcer des guillemets autour du chemin lorsque vous ajoutez backupPath.FullName aux arguments, comme ceci:

startInfo.Arguments = "REG EXPORT HKLM\SOFTWARE\Intel\IntelAMTUNS \"" + backupPath.FullName + "\"";