我正在开发一个监视消息队列的Windows服务(RabbitMQ)。只要消息在消息队列中排队,就会在Windows服务中触发一个事件,并启动一个Windows窗体应用程序,它将队列消息作为命令行参数。
所有编码部分都很好。在调试模式下,我已经验证了在队列中是否找到消息时是否正在触发事件,是的,它确实触及了事件回调。但事件发生时,我并没有看到窗体弹出。以下是我尝试执行Windows窗体的方式。
Process process = new Process();
process.EnableRaisingEvents = true;
process.Exited+= <exit event handler>
process.Start(new ProcessStartInfo(){
CreateNoWindow=true,
UseShellExecute=false,
ErrorDialog=true,
FileName = "<path to the .exe file of windows form>",
WindowStyle=ProcessWindowStyle.Hidden
});
process.WaitForExit();
我甚至看不到抛出或记录在EventViewer中的任何错误。这方面的任何帮助都是适用的。
答案 0 :(得分:1)
自Windows Vista以来,Windows服务被禁止与桌面交互。他们根本没有给出interactive session。虽然您可以在服务注册期间覆盖它,但这不是您应该认真考虑的事情。这个选择很快就会完全消失。我甚至不知道它是否仍然在Windows 10中。
他们仍然可以使用right tricks在子程序中包含适当的Manifest来启动Interactive Porgramms。但是,沟通经历了IPC。也许你也可以采用单一实例方法,但现在这些方法有点过时了。