我想能够打开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 )属性更改正在工作的directoy。 看下面的代码:
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