我有这个问题,我写了一个WinForms应用程序,我已经使用了一段时间没有问题。接下来我刚写了一个Windows服务来自动启动/停止我的winforms应用程序。但是现在窗口没有显示,并且在任务管理器中它正在运行。此外,为了测试我的服务,首先它是一个控制台应用程序,因此Console.WriteLine()在显示数据,状态,变量等时非常有用,一旦它成为服务,就不再有控制台了。那么,这是我所遗漏的一切吗?
嗯,我需要的是启动/停止winform应用程序的服务。这是一个监控。因此,如果winform应用程序未运行,则创建一个进程并启动它。但如果是午夜,则应用程序不应该运行,然后服务找到该进程并关闭它。我不想将winform应用程序转换为服务,或将服务转换为winform应用程序。
我首先想到的只是在“启动”文件夹中放置我的winforms应用程序的快捷方式来启动它,但我需要关闭它,和/或重新启动它。这就是我编写服务的原因。
谢谢!
答案 0 :(得分:2)
从Windows Vista开始,服务无法直接与桌面交互,这意味着它无法生成可见的表单。
即使您将其设置为尝试这样做,您将获得的最佳效果是向用户显示的UAC样式提示,而不是您希望显示的程序。这是我们尝试遵循此结果时的结果:How can a Windows service execute a GUI application?
我们有一个Windows应用程序绝对需要与最初编写为Windows服务的桌面进行交互。为了解决这些限制,我们被迫将其作为WinForms应用程序编写,并将主窗体的Visible属性设置为“false”。当我们需要显示它时,我们将其设置为“true”。这是一个黑客,我们知道它,但我们永远找不到更好的解决方案。
这篇文章确实提供了替代方案。他们没有为我们工作,但也许你的情况不同。 http://msdn.microsoft.com/en-us/library/windows/desktop/ms683502(v=vs.85).aspx