在c#和#x27中运行命令行;processstartinfo

在c#和#x27中运行命令行;processstartinfo,c#,C#,我正在从c#运行下面的程序 vpncmd位于c:\windows\system32中 当我在命令提示符下运行时,运行vpncmd命令字符串工作正常 如果我用类似“ipconfig/all”的stock命令替换vpncmd,它就可以正常工作 我有另一个系统运行完全相同的命令,工作正常(唯一的区别是此服务器是Windows server 2016,其工作的服务器是server 2012) 结果始终返回为“” ExecuteCommandBuild(“vpncmd/server/hub:/PASSWO

我正在从c#运行下面的程序

vpncmd位于c:\windows\system32中

当我在命令提示符下运行时,运行vpncmd命令字符串工作正常

如果我用类似“ipconfig/all”的stock命令替换vpncmd,它就可以正常工作

我有另一个系统运行完全相同的命令,工作正常(唯一的区别是此服务器是Windows server 2016,其工作的服务器是server 2012)

结果始终返回为“”

ExecuteCommandBuild(“vpncmd/server/hub:/PASSWORD:/cmd iptable”);
public void ExecuteCommandBuild(object命令)
{
尝试
{
System.Diagnostics.ProcessStartInfo procStartInfo=
新系统.Diagnostics.ProcessStartInfo(“cmd”、“/c”+命令);
procStartInfo.RedirectStandardOutput=true;
procStartInfo.UseShellExecute=false;
procStartInfo.CreateNoWindow=true;
System.Diagnostics.Process proc=新的System.Diagnostics.Process();
proc.StartInfo=procStartInfo;
proc.Start();
字符串结果=proc.StandardOutput.ReadToEnd();
}

原因是您实际上正在流程(cmd)中创建一个新流程

相反,您需要直接调用流程:

ExecuteCommandBuild("vpncmd", "<server> /server /hub:<hub> /PASSWORD:<psswd> /cmd iptable");


public void ExecuteCommandBuild(string fileName, string arguments)
        {

            try
            {

                System.Diagnostics.ProcessStartInfo procStartInfo =
                new System.Diagnostics.ProcessStartInfo(fileName, arguments); 
                procStartInfo.RedirectStandardOutput = true;
                procStartInfo.UseShellExecute = false;               
                procStartInfo.CreateNoWindow = true;              
                System.Diagnostics.Process proc = new System.Diagnostics.Process();
                proc.StartInfo = procStartInfo;
                proc.Start();              
                string result = proc.StandardOutput.ReadToEnd();


}
ExecuteCommandBuild(“vpncmd”,“server/hub:/PASSWORD:/cmd iptable”);
public void ExecuteCommandBuild(字符串文件名、字符串参数)
{
尝试
{
System.Diagnostics.ProcessStartInfo procStartInfo=
新的System.Diagnostics.ProcessStartInfo(文件名、参数);
procStartInfo.RedirectStandardOutput=true;
procStartInfo.UseShellExecute=false;
procStartInfo.CreateNoWindow=true;
System.Diagnostics.Process proc=新的System.Diagnostics.Process();
proc.StartInfo=procStartInfo;
proc.Start();
字符串结果=proc.StandardOutput.ReadToEnd();
}

另外,如果数据太大,ReadToEnd可能会产生问题。如果数据太大,我可以根据需要提供替代异步代码。

谢谢,我的实际问题是vpncmd需要在C:\Windows\SysWOW64中
虽然它在c:\windows\system32中,但在cmd中使用绝对路径也找不到它。您的回答帮助我解决了isse问题

谢谢!-它给出了例外“系统找不到指定的文件”您可能应该提供vpncmd的完整路径
ExecuteCommandBuild("vpncmd", "<server> /server /hub:<hub> /PASSWORD:<psswd> /cmd iptable");


public void ExecuteCommandBuild(string fileName, string arguments)
        {

            try
            {

                System.Diagnostics.ProcessStartInfo procStartInfo =
                new System.Diagnostics.ProcessStartInfo(fileName, arguments); 
                procStartInfo.RedirectStandardOutput = true;
                procStartInfo.UseShellExecute = false;               
                procStartInfo.CreateNoWindow = true;              
                System.Diagnostics.Process proc = new System.Diagnostics.Process();
                proc.StartInfo = procStartInfo;
                proc.Start();              
                string result = proc.StandardOutput.ReadToEnd();


}