2016-08-26 1 views
1

J'essaie de communiquer avec CMD via mon formulaire, mais je rencontre une erreur "Chemin d'accès au fichier non spécifié" même si je lui ai donné des informations complètes, ou l'ai-je? Je vais essayer de fournir autant d'informations que possible. Si vous avez besoin de quelque chose de spécifique, faites le moi savoir. Donc, comment cela fonctionne, vous appuyez sur le bouton 1 et il ouvre l'invite de commande. Puis procède au chargement de Label3, label1 puis du texte de label2 ou peut-être que ce processus se produit en même temps (pas d'indice). Ils sont tous censés travailler ensemble pour construire un code séquencé sans que l'utilisateur n'ait à toucher une partie de ce processus.CMD "Chemin de fichier non spécifié". Formulaire Visual basic 2008 à cmd

Fonction de Button1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    Shell("C:\Windows\System32\cmd.exe /k" + Label3.Text + Label1.Text + Label2.text, AppWinStyle.NormalFocus) 
End Sub 

Puis je fis charge form1 ces ensemble de choses au démarrage.

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    Label1.Text = "Wow-64.exe" 
    Label2.Text = "-launcherlogin -noautolaunch64bit -launch -uid wow_enus" 
    Label3.Text = "cd /d D:\World of Warcraft2" 
End Sub 

donc son chargement du texte dans les étiquettes, au démarrage, prêt à aller pour l'ordre de la séquence button1.

Lorsque je clique sur le bouton, j'obtiens l'erreur de chemin de fichier as shown here. Le fichier que j'essaie de jouer avec se trouve sur mon lecteur D: \ (si cela aide, encore une fois aucune idée). Ce qui est bizarre, c'est que j'ai tapé tout ce code dans CMD et ça a fonctionné parfaitement sans erreur mais avec ça, il ne trouve pas le fichier de ce que je reçois. Comme je l'ai dit, si je n'ai pas fourni suffisamment d'informations, dites-moi simplement ce dont vous avez besoin et je répondrai avec.

+0

vérifiez votre espacement. Votre chaîne dans le shell serait concaténer à 'C: \ Windows \ System32 \ cmd.exe/kcd/d D: \ World of Warcraft2' (notez la partie' kcd') – Takarii

+0

@Takarii: Encore pire, voir ma réponse. –

Répondre

0

d'abord, jamais concaténer des chaînes avec l'opérateur +, utilisez toujours l'esperluette: &. L'opérateur + peut causer des problèmes dans le futur que vous ne rencontrerez jamais avec l'esperluette (See this for a few examples).


En second lieu, vous semblez manquer un espace entre /k et Label3.Text, et aussi entre Label1/2/3.Text. Cela va créer une chaîne comme:

/kcd /d D:\World of Warcraft2Wow-64.exe-launcherlogin -noautolaunch64bit -launch -uid wow_enus 

au lieu de l'actuel:

/k cd /d D:\World of Warcraft2 Wow-64.exe -launcherlogin -noautolaunch64bit -launch -uid wow_enus 

D'ailleurs vous avez également besoin d'une esperluette entre vos deux commandes et citations autour d'eux puisqu'ils comprennent des espaces. Par exemple:

/k cd /d "D:\World of Warcraft2" & Wow-64.exe "-launcherlogin -noautolaunch64bit -launch -uid wow_enus" 

Troisièmement et enfin, je vous suggère d'utiliser le Process.Start() method au lieu de Shell(). Shell() est obsolète et n'existe que pour la compatibilité ascendante.

Le premier argument de Process.Start() est le chemin d'accès au processus que vous voulez démarrer et le second est les paramètres que vous souhaitez lui envoyer. En outre, au lieu de spécifier le chemin complet de cmd (car il peut être différent sur certains ordinateurs) il suffit de dire cmd.exe.

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    Label1.Text = "Wow-64.exe" 
    Label2.Text = "-launcherlogin -noautolaunch64bit -launch -uid wow_enus" 
    Label3.Text = "cd /d ""D:\World of Warcraft2""" '<-- Added additional quotes. 
End Sub 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    Process.Start("cmd.exe", "/k " & Label3.Text & " " & Label1.Text & " """ & Label2.text & """") 
End Sub 

deux citations dactylographie ("") est le meilleur moyen d'ajouter une citation à une chaîne en VB.NET, et comme il doit être entouré de deux autres citations: ce """" va créer une citation.