2016-03-04 1 views
0

Bonjour Je souhaite démarrer un programme depuis mon application vb.net.Exécuter la commande CMD à partir de vb.net

Le problème que j'ai, sont des espaces dans le commant. Mon code ressemble à ceci:

Dim p As New Process 
Dim pi As ProcessStartInfo = New ProcessStartInfo() 
execute = generateStatement(project) 
pi.FileName = "cmd.exe" 
pi.UseShellExecute = False 
pi.RedirectStandardOutput = True 
pi.Arguments = "/K " + execute 
p.StartInfo = pi 
p.Start() 

= execute "C: \ Program Files (x86) \ Microsoft Visual Studio \ VB98 \ VB6.EXE" cmd sortie = 'C: \ Program' est pas reconized comme commande interne ou externe

alors j'ai essayé de mettre des guillemets (ajouter Char 34) befor et afer la chaîne comme ceci:

execute = "" C: \ Program Files (x86) \ Microsoft Visual Studio \ VB98 \ VB6.EXE ""

toujours la même sortie cmd. J'ai donc essayé la commande via Shell, toujours le même problème. Est-ce que quelqu'un peut me dire comment je peux passer une commande consol avec des espaces dedans? Modifier dir n'est pas une option, je dois mettre plus de répertoires dans la commande.

+0

Utiliser 'System.Management.Automation' // utilisé pour powershell – Ian

Répondre

0

Vous êtes sur la bonne voie: Pour échapper à la citation dans l'argument, vous pouvez utiliser des guillemets. Mais, vous devez également mettre votre chaîne quotée échappée dans une chaîne de sorte qu'en réalité, vous finissez avec trois citations où vous définissez execute.

execute = """C:\Program Files (x86)\Microsoft Visual Studio\VB98\VB6.EXE""" 

citation 1: commencer chaîne

citation 2: citation d'évasion

devis 3: la citation

Ou, Évasion quand vous construisez pi.arguments:

pi.Arguments = "/K " + """" + execute """" 

citation 1: début chaîne

citation 2: échapper

citation 3: le guillemet

devis 4: chaîne de fin

+0

Merci. Cela a fonctionné pour moi. Ajout de trois qoutes à la chaîne n'était pas sur ma liste. ;) – Twiebie