我们开发了一个使用 Procrun 包装为 Windows 服务的 jar,Procrun 是 Windows 服务的 Apache Commons Daemon 组件。在我自己的计算机和其他一些开发机器上一切正常,但是当我们将它安装在生产环境(Windows Server 2008)中时,我们开始出现奇怪的行为。
首先,在启动和停止服务后,由于某种原因,Java 停止工作。在任何命令提示符下键入经典的“java -version”绝对不会产生任何输出。尝试启动任何 Java 应用程序绝对没有效果。唯一的解决方案是重新安装 JRE。如果您在重新安装 JRE 后停止并启动该服务,它会再次损坏。
另一件奇怪的事情正在发生。有时,当使用 prunmgr 管理我们的服务时(在将其重命名为我们的服务名称后,说“MYSERVICE”),它会给我们一条消息,说服务“gMYSERVICE”没有安装。在某些情况下,它似乎认为我们的服务附加了一个“g”。有时存在两个额外的隐藏文件,可能存在 prunsrv 和 prunmgr 的副本,并附加一个“g”,如 gprunsrv.exe 和 gMYSERVICE.exe。即使打开隐藏文件模式,使用系统资源管理器也无法看到这些文件,但可以通过 teamviewer 检测到。