我有以下代码调用并执行批处理文件
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName = @"C:\tS\comm.bat";
proc.StartInfo.RedirectStandardError = false;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.UseShellExecute = false;
proc.Start();
string strGetInfo = proc.StandardOutput.ReadToEnd();
strCMDOut = strGetInfo.Substring(strGetInfo.Length - 5, 3);
//MessageBox.Show(cmdOut);
proc.WaitForExit();
comm.bat
文件包含以下内容,
@ECHO ON
java com.test.this send
如何将其合并到我的C#代码中并防止任何文件问题,而不是调用文件来执行bat文件? (我需要将输出保存到字符串中,因为它已经在上面的代码中执行了。)
另外,我如何以静默方式进行操作,因此用户看不到CMD窗口并且操作是在后台进行的?
我用以下代码替换了代码:
var proc = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = "cmd.exe",
Arguments = "java com.test.this send",
RedirectStandardError = false,
UseShellExecute = false,
RedirectStandardOutput = true,
CreateNoWindow = true
}
};
proc.Start();
string strGetInfo = proc.StandardOutput.ReadToEnd();
strCMDOut = strGetInfo.Substring(strGetInfo.Length - 5, 3);
MessageBox.Show(strCMDOut);
我在消息框中输入.
,而不是原始代码显示的代码。
答案 0 :(得分:2)
可能足以:
var pro = Process.Start("java", "com.test.this send");
考虑到你有@ECHO ON
,我认为你想要读取进程的输出(如果它从内部重定向)。
阅读:Process.start: how to get the output?
如果这不是您所要求的,请澄清。
答案 1 :(得分:1)
关于, 我如何静默地执行此操作,因此用户没有看到CMD窗口并且操作是在后台进行的?
您可以通过设置ProcessStartInfo的此属性来禁止新窗口。
CreateNoWindow = true