我正在从c#
运行以下内容vpncmd位于c:\ windows \ system32
当我在命令提示符
中运行时,运行vpncmd命令字符串可以正常工作如果我用" ipconfig / all"等库存命令替换vpncmd它工作正常
我有另一个系统运行完全相同的命令,工作正常(唯一的区别是这台服务器是Windows Server 2016,其工作的是Server 2012)
结果总是以""
返回 ExecuteCommandBuild("vpncmd <server> /server /hub:<hub> /PASSWORD:<psswd> /cmd iptable");
public void ExecuteCommandBuild(object command)
{
try
{
System.Diagnostics.ProcessStartInfo procStartInfo =
new System.Diagnostics.ProcessStartInfo("cmd", "/c " + command);
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();
}
答案 0 :(得分:2)
原因是您实际上是在流程中创建了一个新流程(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();
}
此外,如果数据太大,ReadToEnd可能会产生问题。如果您的数据很大,我可以根据需要提供备用异步代码。
答案 1 :(得分:0)
感谢我的实际问题是vpncmd需要在C:\ Windows \ SysWOW64中 虽然它在c:\ windows \ system32中,但即使在cmd中使用绝对路径也找不到它。你的回答帮助我解决了我的问题