我们的软件由两个程序组成。一个exe是一个守护进程,另一个是主应用程序。当我们的主应用程序正在运行时(守护进程当然也是活着的),守护进程窗口TopMost
设置为false
,主应用程序启动并杀死驻留在托盘中的另一个进程(在Windows Embedded
的图像中不可见和禁用)。从主应用程序停用的窗口之一中,我们终止了第三方进程,而不是回到以前的窗口,我们看到了守护进程的窗口。这是因为第三方应用程序被杀害而发生的。如果我们不杀死它,那么我们的主应用会回到适当的窗口。 第三方程序的死亡如何造成这种奇怪的行为?杀死窗户焦点上的过程影响
UPDATE
守护程序启动主应用程序。守护程序,它实现OnActivated如下一个窗口:
private void MainWindow_OnActivated(object sender, EventArgs e) {
this.Topmost = true;
}
private void MainWindow_OnDeactivated(object sender, EventArgs e) {
this.Topmost = false;
}
杀死在主应用程序窗口之一的停用第三方应用程序意味着,在该窗口OnDeactivated实现如下:
protected override void OnDeactivate(bool close) {
Process.Kill(procId);
}
“为什么你是否希望“回到前一个窗口”? 那么,主应用程序总是有一个窗口是最顶层=真,有时我们打开模式对话框,而不是用户手动管理这些窗口。尽量减少它们,所以我希望能够通过Calibur去尝试激活的窗口n.Micro。但是当我们要求Caliburn激活另一个窗口并且杀死托盘中的应用程序时,我们的守护程序窗口将变为激活状态并且处于最前端。如果我们评论杀人事件,那么我们会看到我们尝试激活的窗口。
顺便说一句,我们问我们的开发第三方应用程序的同事推出没有UI的版本。这并没有帮助。这只是一个猜测,它失败了。
你要我们列出可能导致一个窗口显示出来,所以你可以选择合适的一个一切可能的办法,或者你认为它可能是一些相关细节添加到您的问题有用吗? – CodeCaster
除了我所说的之外,没有任何相关的细节。 – EngineerSpock
我真诚地恳求不同。上述应用程序如何相互作用?什么是停用,是指在WPF意义上失效(失去焦点)?你如何杀死应用程序?你为什么期望“回到上一个窗口”?其他相关窗口的“TopMost”是什么?你为什么要以这种方式隐藏守护进程窗口,而不是以其他方式工作?但是可以肯定的是,你可以拒绝提供任何额外的细节,以便其他人可以帮助调查,并希望遇到这个特定问题的其他人来代替,但是你的机会相当渺茫。 – CodeCaster