J'ai quatre choses pour vous que vous pouvez essayer :
(1) Essayez de fournir le chemin complet pour cmd.exe
(par exemple, sur ma machine : C:\WINDOWS\SYSTEM32\CMD.EXE
).
(2) Essayez d'ajouter call
à la commande à exécuter :
Process.Start(@"C:\WINDOWS\SYSTEM32\CMD.EXE", @"/c call D:\a.cmd");
(3) A part ça, je ne peux que deviner où le %1
en el Win32Exception
vient de. Peut-être que vos associations de fichiers sont mal configurées.
Si vous tapez ce qui suit sur la ligne de commande :
> assoc .cmd
Vous obtiendrez probablement une mention de cmdfile
. Si vous recherchez alors ce jeton avec :
> ftype cmdfile
Vous pourriez obtenir une réponse du type :
cmdfile="%1" %*
Ces paramètres sont stockés dans le registre, et c'est ainsi que l'interpréteur de ligne de commande sait comment exécuter les fichiers avec des extensions personnalisées. (Vous pouvez découvrir comment un document PDF est démarré en exécutant les deux instructions ci-dessus pour la commande .pdf
extension.)
(4) Si vous commencez à soupçonner que votre machine est mal configurée, lancez regedit
(l'éditeur de registre) et localisez la clé HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor
.
Sur ma machine Windows XP (et votre Process.Start
exemple fonctionne sur ma machine, avec des noms de fichiers différents cependant), j'ai les valeurs suivantes stockées là-dedans :
// Name Type Value
// -----------------------------------------------
// (standard) REG_SZ (not set)
// AutoRun REG_SZ
// CompletionChar REG_DWORD 0x00000040 (64)
// DefaultColor REG_DWORD 0x00000000 (0)
// EnableExtensions REG_DWORD 0x00000001 (1)
// PathCompletionChar REG_DWORD 0x00000040 (64)
Parmi ceux-ci, les AutoRun
pourrait être d'un certain intérêt. Je pense qu'elle correspond à la /d
le commutateur de ligne de commande de cmd.exe
qui contrôle si cmd.exe
tente de lancer des fichiers avec des extensions personnalisées. En général, cette fonction est activée. Peut-être que sur votre machine, ce n'est pas le cas ?