C# - 从Windows服务启动Windows窗体

时间:2018-05-14 07:45:30

标签: c# winforms rabbitmq windows-services

我正在开发一个监视消息队列的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中的任何错误。这方面的任何帮助都是适用的。

1 个答案:

答案 0 :(得分:1)

自Windows Vista以来,Windows服务被禁止与桌面交互。他们根本没有给出interactive session。虽然您可以在服务注册期间覆盖它,但这不是您应该认真考虑的事情。这个选择很快就会完全消失。我甚至不知道它是否仍然在Windows 10中。

他们仍然可以使用right tricks在子程序中包含适当的Manifest来启动Interactive Porgramms。但是,沟通经历了IPC。也许你也可以采用单一实例方法,但现在这些方法有点过时了。