我有四件事适合您,您可以尝试:
(1)尝试提供完整路径cmd.exe
(例如在我的机器上:C:\WINDOWS\SYSTEM32\CMD.EXE
).
(2)尝试添加call
到要执行的命令:
Process.Start(@"C:\WINDOWS\SYSTEM32\CMD.EXE", @"/c call D:\a.cmd");
(3)除此之外,我只能猜测在哪里%1
in the Win32Exception
是来自。也许您的文件关联设置不正确。
如果您在命令行中键入以下内容:
> assoc .cmd
您可能会提到cmdfile
。如果您随后使用以下命令查找此令牌:
> ftype cmdfile
您可能会得到如下答案:
cmdfile="%1" %*
这些设置存储在注册表中,这就是命令行解释器知道如何执行具有自定义扩展名的文件的方式。 (执行上面两条语句即可了解PDF文档是如何启动的.pdf
扩大。)
(4)如果您开始怀疑您的计算机可能配置错误,请启动regedit
(注册表编辑器)并找到密钥HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor
.
在我的 Windows XP 计算机上(以及您的Process.Start
示例在我的机器上运行,但文件名不同),我在那里存储了以下值:
// 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)
其中,AutoRun
值可能会引起一些兴趣。我认为它对应于/d
命令行开关cmd.exe
,它控制是否cmd.exe
尝试以自定义扩展名启动文件。通常,此功能已启用。也许,在你的机器上,不是吗?