我正在为多个Unity3D和Unreal小项目编写一个WPF启动器应用程序,该项目从中心应用程序(也是Unity)读取退出代码,以根据接收到的退出代码启动其他项目。
不幸的是,其中一些小项目没有实现“干净出口”,需要通过ALT+F4
终止,而由于某些原因,WaitForExit
并没有被我的启动器应用程序注册。
退出代码部分与有问题的项目无关。我只将退出代码用于集线器应用程序。从集线器应用程序启动它们可以正常工作,并且如果它们具有某种退出方式,则我的启动器将像魅力一样运行。
我正在使用private static Process currentRunningProcess;
public static void StartApp(string applicationPath)
{
if (currentRunningProcess != null) return;
currentRunningProcess = new Process
{
StartInfo = new ProcessStartInfo(applicationPath)
};
currentRunningProcess.Start();
}
//this function is used both for the hub app and for the little projects to
//avoid having two functions that basically do the same
//the exit code is only used for the hub app and ignored for anything else
public static int GetExitCode()
{
currentRunningProcess.WaitForExit();
var exitCode = currentRunningProcess.ExitCode;
currentRunningProcess = null;
return exitCode;
}
且没有超时,因为如果用户不退出,应用程序将无限期运行。
ALT+F4
我是否缺少某些东西,或者应该以这种方式工作?如果第二种情况是正确的,我如何改善我的实现以注册(?:\sFROM\s|\sINTO\s|\sNEXTVAL[\s\W]*|^UPDATE\s|\sJOIN\s)[\s`'"]*([\w\.-_]+)
化的应用程序?
(不幸的是,不可能为小项目实现干净的出口,因为其中一些是来自第三方提供商的委托,而我没有源代码)
答案 0 :(得分:1)
好吧,原来问题出在我从启动器启动的虚幻引擎应用程序中。由于某种原因,虚幻引擎正在启动两个进程,而只有第二个进程受Alt+F4
影响。
由于原始进程从未关闭,因此我的启动器无法检测到它已关闭。
感谢@Damien_The_Unbeliever将我指向任务管理器。我不知道为什么我在这里张贴之前没有检查。