即使在用户注销后,也可以在Windows中运行Java进程

时间:2009-02-16 12:33:10

标签: java windows windows-services

我有一个批处理文件,可以在Windows 2003服务器中启动Java进程。根据安全策略,如果用户在一段时间内处于非活动状态,则该计算机的用户将被强制注销。问题是,当用户注销时,该过程也会死亡。

我安排了一项新任务(控制面板 - >计划任务)并选择了“当我的计算机启动时”选项,并在那里提供了用户帐户详细信息。但它似乎没有任何影响,用户仍然退出并且进程终止。是否需要重新启动才能使此更改生效?重启后,我能实现我所期待的(保持流程存活)吗?

或者,将此过程作为Windows服务运行解决问题?如果是这样,您能告诉我如何将Java程序或批处理文件作为Windows服务运行吗?我不想使用任何其他第三方工具或库。

由于

5 个答案:

答案 0 :(得分:11)

如果您希望它在计划任务下运行,您必须确保没有“仅在用户登录时运行”,这通常意味着您需要提供密码。

Windows服务是正常的方式:Java service wrapper是第三方,但很多人都使用它。

如果您真的不想使用第三方方法,可以在WIndows NT或更高版本上使用svrany.exe (http://support.microsoft.com/kb/137890),但它不是专为Java设计的。

答案 1 :(得分:5)

使用srvany.exe包装进程并作为服务启动也可以。

http://support.microsoft.com/kb/137890

答案 2 :(得分:1)

我正在使用Java Service Wrapper作为Windows服务启动java进程。 我猜它的效果与上一篇文章中提到的srvany.exe类似。

答案 3 :(得分:0)

我不知道这是相关的,但我们正在使用jvm的标志,因此它不会在注销时关闭

"java -Xrs"

Link to suns description of -Xrs

答案 4 :(得分:0)

根据我的分析,

Idle Solution将编写一个VC ++(.net)Windows服务创建程序,将.bat / .exe作为系统服务启动,并向SCM提供所有必需的回调方法。

注意: 1.使用srvany.exe包装进程无法正常工作,因为它没有对SCM(服务控制管理器)的任何回调过程。 2.而java服务Wrapper是第三方API(许多是LGPL许可的)。