gpt4 book ai didi

c# - 在 c#' processstartinfo 中运行命令行

转载 作者:行者123 更新时间:2023-11-30 16:41:32 28 4
gpt4 key购买 nike

我正在从 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();


}

最佳答案

这样做的原因是您实际上是在您的进程 (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 也会产生问题。如果您的数据很大,我可以根据需要提供替代的异步代码。

关于c# - 在 c#' processstartinfo 中运行命令行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48475588/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com