我有一个Process l_batchProcess
,并在内部执行cmd.exe
,其中包含与CAT.NET cmd
相关的某些命令,但当我显式关闭Process实例时,我看到了它仍然在后台执行CAT.NET cmd.exe。
还有另一个问题;我不确定l_batchProcess.WaitForExit()
是否有任何事情要做,一旦CAT.NET在后台完成,就要让程序恢复。当我检查l_batchProcess
时,似乎该进程已退出,并且未告知任何进程已关联。
有人可以指导我,如果需要更多详细信息,请告诉我。
ExecuteBatchFile
以异步方式运行。
public string ExecuteBatchFile(BatchFile batchFile)
{
//var lockObject = new object();
string returnMessage = string.Empty;
l_batchProcess.StartInfo = new ProcessStartInfo()
{
FileName = batchFile.InputFilePath,
UseShellExecute = false,
CreateNoWindow = true,
RedirectStandardError = true,
RedirectStandardOutput = true,
};
if (File.Exists(batchFile.InputFilePath))
{
try
{
l_batchProcess.Refresh();
l_batchProcess.Start();
processStartedFlag = true;
l_batchProcess.BeginOutputReadLine();
l_batchProcess.BeginErrorReadLine();
l_batchProcess.WaitForExit();
if (l_batchProcess.ExitCode != 0)
returnMessage = "Errors while executing";
}
finally
{
CloseProcess();
}
}
else
{
returnMessage = "Batch File path incorrect";
}
File.Delete(batchFile.InputFilePath);
return returnMessage;
}
public bool CloseProcess()
{
if (!processStartedFlag) return false;
l_batchProcess.CancelOutputRead();
l_batchProcess.CancelErrorRead();
l_batchProcess.Close();
processStartedFlag = false;
return true;
}
编辑:很抱歉,我认为从我的问题来看,该过程似乎仍在正常过程中运行,我的意思是当我明确尝试关闭该过程时。
答案 0 :(得分:0)
似乎有效的一种解决方法是直接调用CAT.NET
的可执行文件并传递arguments
。然后我Kill
进程代替Close
。这样我就可以控制杀死可执行文件。
但似乎并不优雅。
PowerShell看起来确实是一个有趣的解决方案。