我使用此代码在C#中执行多cmd命令。
首先,我创建了构造函数以创建过程。
public CMD()
{
process = new Process();
startInfo = new ProcessStartInfo();
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.CreateNoWindow = true;
startInfo.RedirectStandardInput = true;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
startInfo.UseShellExecute = false;
startInfo.FileName = "cmd.exe";
startInfo.Verb = "runas";
process.StartInfo = startInfo;
process.Start();
process.EnableRaisingEvents = true;
process.StandardInput.AutoFlush = true;
process.BeginOutputReadLine();
process.BeginErrorReadLine();
process.OutputDataReceived += Process_OutputDataReceived;
process.ErrorDataReceived += Process_ErrorDataReceived;
process.Exited += Process_Exited;
}
然后我使用此代码执行多个命令。
public void _cmd(string command)
{
using (StreamWriter sw = process.StandardInput)
{
if (sw.BaseStream.CanWrite)
{
sw.WriteLine(command);
}
}
}
对于第一个命令没有问题,但是当我发送第二个命令时,我在sw.BaseStream.CanWrite
行中遇到了此错误。
Object reference not set to an instance of an object.
当我第一次调试代码sw.BaseStream可以,但是在第二条命令中它得到null
这是什么问题?
答案 0 :(得分:2)
我怀疑是因为您的using
陈述。退出using
块后,它将在process.StandardInput()
中调用Dispose。