我正在尝试使用Process类从主要进程中运行另一个进程。
AudioRecordProcess = new Process();
AudioRecordProcess.StartInfo.UseShellExecute = false;
AudioRecordProcess.StartInfo.FileName = @"RecordAudio\RecordAudio";
AudioRecordProcess.StartInfo.CreateNoWindow = true;
这个过程开始很好但是:
对这种奇怪行为有什么想法吗? 感谢
答案 0 :(得分:0)
课程'流程'用于创建和/或控制和监控特定过程。
只有控制台应用程序才会服从CreateNoWindow = true,而 Windows窗体和WPF应用程序将忽略它。
由于您已在系统上启动了另一个进程,即该进程 将继续自行,一旦停止,将不会终止 父进程。然而,有一些资源挥之不去(特别是 在父进程中阻止的线程和句柄相关) 父进程在其主窗口关闭时终止。
杀死中断正常的进程执行并强制停止 因此,关闭处理程序是正常的 执行
修改强>
对于test创建WPF应用程序并将以下代码放入其中:
public MainWindow() {
InitializeComponent();
Loaded += MainWindow_Loaded;
Closed += MainWindow_Closed;
}
private Process process;
private void MainWindow_Closed(object sender, EventArgs e) {
// Log("WpfApp3.log", $"{DateTime.Now} Closed");
}
private void MainWindow_Loaded(object sender, RoutedEventArgs e) {
// Log("WpfApplication3.log", $"{DateTime.Now} Loaded");
process = new Process {
StartInfo = {
UseShellExecute = false,
// FileName = @"..\..\WpfApp2\bin\Debug\WpfApp2.exe",
FileName = @"..\..\CnslApp1\bin\Debug\CnslApp1.exe",
// FileName = @"..\..\WnFrmApp2\bin\Debug\WnFrmApp2.exe",
CreateNoWindow = true
}
};
process.Start();
var result = process.CloseMainWindow();
if (result) {
...
}
}
然后创建三个新项目;每个控制台/ Windows窗体/ WPF一个。并在“' FileName' StartInfo的参数。然后,您可以使用参数来查看每个参数的行为。
在我的情况下,process.CloseMainWindow()确实没有效果,直到被移入另一个方法,因为进程尚未启动。但是一旦进入按钮处理程序并执行它将终止所有三种类型(在本例中可以使用一种类型)。
当窗口被隐藏时,唯一的例外是控制台应用程序。