如何从 C# 执行批处理文件?

2024-03-05

(解决方案见文末)

我不认为这会很难。我有一个命令文件 da.cmd 其中包含:

copy /b d:\7zS.sfx + d:\config.txt + d:\files.7z d:\setup.exe

但 C# 的这些行不会执行它:

Process.Start("d:\\a.cmd");
Process.Start("cmd", "/c d:\\a.cmd");

引发 Win32Exception:“%1 不是有效的 Win32 应用程序。”

Process.Start 打开 .pdf 文件...为什么不执行命令文件?

如果我在 cmd 窗口中输入它,这将起作用:

cmd /c d:\a.cmd

Windows XP、MS Visual Studio 2008。

提前致谢, 吉姆

解决方案 我只是有点尴尬:( 我的应用程序目录中有一个名为 cmd.exe 的文件,大小为零。我不知道它是如何到达那里的,但它现在是 toast 并且上述两个 C# 语句现在都可以工作。我去找一本哈利·波特的书,这样我就可以从多比那里得到一些自我惩罚的想法……


我有四件事适合您,您可以尝试:

(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尝试以自定义扩展名启动文件。通常,此功能已启用。也许,在你的机器上,不是吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 C# 执行批处理文件? 的相关文章

随机推荐