【问题标题】:make an interactive windows service制作交互式 Windows 服务
【发布时间】:2014-09-23 16:51:41
【问题描述】:

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

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

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

wrapper.ntservice.interactive=TRUE

此标志是自动执行以下手动配置的方式吗?

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

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

谢谢

【问题讨论】:

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


    【解决方案1】:

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

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

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

    HTH

    【讨论】:

    • 在 Java 中执行此操作的最佳且简单的方法是使用 JavaExe 解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    • 2014-01-01
    相关资源
    最近更新 更多