[英]c# open cmd.exe process and Execute multiple commands
我希望能够打开cmd并从窗口执行两个命令。 首先,我想导航到一个特定的目录,然后从中运行第二个命令。 运行单个命令非常简单,因为这是我要做的全部事情:
string path = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86) + @"\Cisco Systems\VPN Client\";
Process process = new Process();
ProcessStartInfo processInfo = new ProcessStartInfo("cmd.exe", @"/c cd " + path );
process.StartInfo = processInfo;
process.Start();
但是,不确定添加第二个参数的方式,以便它在cmd运行第一个命令之后运行。 一些研究使我想到了这个代码片段。 不确定是否可行,因为我的目的是从cmd启动cisco vpn客户端,但这似乎无法启动。 这是代码:
string path = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86) + @"\Cisco Systems\VPN Client\";
Process process = new Process();
ProcessStartInfo processInfo = new ProcessStartInfo("cmd.exe", @"/c cd " + path + "-t vpnclient connect user validuser pwd validpassword nocertpwd validconnectionentry ");
process.StartInfo = processInfo;
process.Start();
我曾经使用凭据从cmd启动vpn客户端,只是为了确保它们有效并且可以正常工作,但是我无法以编程方式通过C#将其关闭。
问候。
您可以做三件事来实现自己想要的。 最简单的方法是通过ProcessStartInfo
设置流程的工作目录。 这样,您只需执行命令即可启动VPN客户端。
第二个选项是重定向过程的输入和输出。 (也可以通过ProcessStartInfo
完成)如果您需要向流程发送更多输入,或者想要检索刚开始的流程的输出,则需要执行此操作。
第三个选项是将两个命令与&
符号组合在一起。 使用&
符号可使cmd.exe依次执行两个命令(有关可用符号的概述,请参见此处 )。 使用此选项将导致如下命令: /c cd path & vpnclient
。
但是,因为您只想使用第一个选项来更改流程的工作目录,这会使您的代码更具可读性。 因为阅读您的代码的人无需知道bash中的&
符号即可了解您的代码的用途。 更改工作目录是通过ProcessStartInfo
( MSDN )的WorkingDirectory
( MSDN )属性完成的。 请参见以下代码:
var processInfo = new ProcessStartInfo("cmd.exe", @"/c vpnclient connect user validuser pwd validpassword nocertpwd validconnectionentry ");
processInfo.UseShellExecute = false;
processInfo.WorkingDirectory = path;
仅当前一个命令成功执行时,才可以使用&
执行下一个命令或&&
执行下一个命令。
例子:
dir /b & cls
和
taskkill /f /im explorer.exe && start explorer
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.