制作互动式Windows服务

时间:2014-09-23 16:51:42

标签: java windows-services java-service-wrapper

我希望我的Java应用程序成为一个交互式Windows服务(用户登录时具有GUI的Windows服务)。

我搜索了这个,我看到这样做的方法是拥有2个程序,第一个是服务,第二个是GUI程序并让它们进行通信 - 服务将从GUI程序中获取命令。

在我开始拆分程序之前,我注意到在“Java Service Wrapper”中有一个标志:

  

wrapper.ntservice.interactive = TRUE

此标志是否自动执行与以下手动配置相同的操作?

  

管理工具 - >服务 - >右键单击 - >属性 - >下   登录选项卡选中允许与桌面交互

这样有问题吗?我应该走很长的路,把我的程序分成两个程序(GUI和服务)吗?

感谢

1 个答案:

答案 0 :(得分:1)

Prior to Windows Vista,所有服务和应用程序都在同一个会话中运行。这提供了允许Windows服务具有前端UI并直接与用户交互的便利,但也带来了安全风险。例如,使用提升的用户权限(例如,管理员权限)运行的Windows服务可能会通过利用UI而受到损害。

从Windows Vista开始,Windows服务在会话0中被隔离,而所有用户登录和应用程序都在其他会话中运行。从技术上讲,Windows服务仍然可以通过会话0与桌面交互,但是普通用户没有方便的方式来访问会话0.因此,当您的Windows服务可以弹出确认对话框时,用户将永远不会看到它,因为它显示在Session 0桌面上。此外,用户将无法确认对话框,这意味着Windows服务仍然“卡住”。

简而言之,让Windows服务与桌面交互不再可行。您必须创建Windows服务,然后创建前端应用程序并为它们提供一些通信方式,例如管道,套接字,共享内存等。在.NET中执行此操作的建议方法是使用{ {3}}(WCF)。我不确定使用Java是多么容易,并且本着完全公开的精神,我自己使用套接字。

HTH