从Windows服务运行Windows窗体应用程序

时间:2012-12-12 10:24:03

标签: c# winapi windows-services

我们需要从服务运行第三方遗留软件,我们希望使用窗口消息自动化它来点击按钮,禁止消息框等。

问题是我似乎无法启动表格处于活动状态,我可以使用Process.GetProcessesByName("ProcessName");检索流程,但MainWindowHandleMainWindowTitle为空。

有没有办法从服务启动Windows客户端程序,以便正确创建表单?

1 个答案:

答案 0 :(得分:0)

服务在与用户桌面,臭名昭着的会话0不同的会话中运行。由于粉碎攻击的长期问题,谷歌“会话0隔离”以了解更多信息,因此Vista被隔离。

会话0仍然有桌面,你只是无法切换到它。获取null MainWindowHandle的最典型诊断是等待时间不足以允许进程创建它。您至少需要Process.WaitForInputIdle()。

这并不能完全承诺一个解决方案,你仍然有一个非常严重的问题,检测到程序行为不端。或者就此而言,MainWindowHandle实际上是启动画面的句柄而不是主窗口,因此因为启动画面被解除而无效。或者该程序因为无法使用其他用户帐户或不常见的工作目录而无法正常运行。 Etcetera,在尝试将其作为服务运行之前,首先要使用控制台模式程序进行操作,然后需要解决这些问题。

在哪一点上最好只是让它成为一个控制台模式的应用程序。因为失败是完全无法识别的,所以当IT​​人员打电话给你时,你的后端会不断出现痛苦,因为它停止工作,你也没有什么可看的。