c# 打开cmd.exe进程并执行多条命令
Posted
技术标签:
【中文标题】c# 打开cmd.exe进程并执行多条命令【英文标题】:c# open cmd.exe process and Execute multiple commands 【发布时间】:2015-06-16 21:45:09 【问题描述】:我希望能够从窗口打开 cmd 并执行两个命令。首先,我想导航到一个特定的目录,然后我可以从中运行第二个命令。运行单个命令非常简单,因为这就是我所要做的:
string path = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86) + @"\Cisco Systems\*** Client\";
Process process = new Process();
ProcessStartInfo processInfo = new ProcessStartInfo("cmd.exe", @"/c cd " + path );
process.StartInfo = processInfo;
process.Start();
但是我不确定添加第二个参数的方法,所以它在 cmd 运行第一个命令之后运行。一些研究使我找到了这个代码 sn-p。我不确定这是否有效,因为我的目标是从 cmd 启动 cisco *** 客户端,而这似乎无法启动它。代码如下:
string path = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86) + @"\Cisco Systems\*** Client\";
Process process = new Process();
ProcessStartInfo processInfo = new ProcessStartInfo("cmd.exe", @"/c cd " + path + "-t ***client connect user validuser pwd validpassword nocertpwd validconnectionentry ");
process.StartInfo = processInfo;
process.Start();
我曾经使用凭据从 cmd 启动 *** 客户端,只是为了确保它们有效并且可以正常工作,但我无法通过 C# 以编程方式将其关闭。
问候。
【问题讨论】:
/c
之后的所有内容都是命令行指令。因此,您可以将其打印出来,然后在命令行中键入相同的内容,看看会发生什么,然后进行试验,直到它起作用为止。在这种情况下,您尝试使用-t
选项运行cd
;没有这样的选择。相反,请使用 &
在一行中包含多个命令。
此外,如果UseShellExecute
为假(可能即使它为真,尽管文档另有说明),您可以设置WorkingDirectory
为新进程设置当前目录。这样一来,您根本不需要 cd
命令。
@HarryJohnston 这对我有用。如果您将其写为答案,那么我会将其标记为遇到类似情况的人的答案。
【参考方案1】:
你可以做三件事来实现你想要的。最简单的就是通过ProcessStartInfo
设置进程的工作目录。这样您只需执行命令即可启动 *** 客户端。
第二个选项是重定向进程的输入和输出。 (也通过ProcessStartInfo
完成)如果您需要向进程发送更多输入,或者当您想要检索刚刚启动的进程的输出时,您需要这样做。
第三个选项是将这两个命令与&
符号结合起来。使用 &
符号使 cmd.exe 顺序执行这两个命令(有关可用符号的概述,请参阅 here)。使用此选项将产生如下命令:/c cd path & ***client
。
但是,因为您只想使用第一个选项更改进程的工作目录,所以您的代码更具可读性。因为阅读您的代码的人不需要知道 bash 中的 &
符号即可理解您的代码的作用。使用ProcessStartInfo
(MSDN) 的WorkingDirectory
(MSDN) 属性更改工作目录。见以下代码:
var processInfo = new ProcessStartInfo("cmd.exe", @"/c ***client connect user validuser pwd validpassword nocertpwd validconnectionentry ");
processInfo.UseShellExecute = false;
processInfo.WorkingDirectory = path;
【讨论】:
我使用了您指定的第一个选项并先设置工作目录然后执行命令。这适用于我的情况,但是一旦我尝试了您指定的所有其他选项,我会发表评论。感谢您指出几种方法。 由于第二个选项太过分了,我没有提供更多信息。请参阅以下tutorial,了解有关如何实现这一目标的一些指示。【参考方案2】:您可以使用&
执行下一个命令或&&
仅在上一个命令成功时执行以下命令。
例子:
dir /b & cls
和
taskkill /f /im explorer.exe && start explorer
【讨论】:
以上是关于c# 打开cmd.exe进程并执行多条命令的主要内容,如果未能解决你的问题,请参考以下文章