我有一个使用某些第三方应用程序的Windows服务。该应用程序是从一个窗口构建的,用于登录,登录后进程在后台运行,而不是打扰任何人。
我有打开此应用程序的代码(使用Process类),填写所有必填字段并点击连接按钮。当我从命令行或win表单使用它时,此代码工作正常,但是从Windows服务执行此代码不执行任何操作 - 不是错误,并且没有exe正在运行!
我知道这听起来有点奇怪,Windows服务应该是UI免费的设计,但我需要在我的服务开始工作之前午餐这个应用程序,我不想通过两个步骤进行此操作 - 午餐外部所有和启动服务。
我尝试从服务属性的登录标签中检查“允许服务与桌面交互”,但这没有做任何事情。
任何建议如何使这项工作,或者可能是这个问题的其他设计让我设法一步完成操作。
感谢。
答案 0 :(得分:1)
请注意,它适用于Windows SDK,您需要使用PInvoke来执行那里的方法。
另请参阅此相关问题:How to start a process from windows service into currently logged in user's session
答案 1 :(得分:1)
您需要重新调整您的期望。系统启动时自动启动服务。用户登录时启动您的应用(例如HKLM\Software\Windows\CurrentVersion\Run
)。安排该服务在应用程序之前具有弹性。还要确保服务可以在应用程序停止(例如崩溃)和重新启动后继续存在。
为什么我要说这一切?那么,即使没有连接的交互式用户,服务也始终在运行。如果是这样,那么您就不能指望您的交互式应用程序在服务启动之前运行。
答案 2 :(得分:0)
我之前遇到过类似的问题,需要在某些条件下显示表单的Windows服务,但大部分时间只是在后台闲置。
不确定您的要求是什么,但我最终将其编写为没有主要表单的表单应用程序。
将此与在启动时启动程序相结合,效果非常好。
基本上
[STAThread]
static void Main(string[] args)
{
// Launch your stuff in a separate thread like you would in the Service Start method.
Application.Run();
}
就是这样。希望它有所帮助。