是否有人在使用JavaExe运行Windows服务时遇到问题,有解决方案吗?
除了服务示例Example3,Example5和Example23之外,JavaExe示例都可以工作。
在每种情况下,都会创建Windows服务,但是任何尝试启动该服务的操作都会弹出错误消息:
“该系统找不到指定的文件。”
没有一个用于注册表的注册表项,其中包含以下内容:
名称:ImagePath
类型:REG_EXPAND_SZ
数据:“ \ JavaExe \ JavaExe \ doc \ examples \ 3-Service \ Example3.exe” __RunService__
如果我从命令行使用__RunService__参数运行Example3.exe,则Java进程将启动并在崩溃前短暂运行。
这些示例全部包含在JavaExe下载中,因此很难看到可能缺少的库。
背景:JavaExe(http://devwizard.free.fr/html/en/JavaExe.html)似乎实现了一种合理的方法,允许从作为服务运行的另一个Java程序中调用Java应用程序。 Windows阻止服务访问桌面,因此JavaExe在服务和应用程序Java程序之间建立了套接字连接,每个套接字都作为用户进程运行,如下所示:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms683502(v=vs.85).aspx
Windows 7 x64(但在XP上以相同的方式失败[请参见下面的更新])
Java版本1.7.0_45
-
更新:
开发人员回复了我的电子邮件,并建议将32位和64位Java版本混淆。
我理顺了这一点。 Example3服务,是从.exe和.jar文件运行的。
JavaExe .zip下载(默认情况下均为32位),现在可以在WinXP(x86)上正确运行。
对于x64计算机,必须使用软件包的compilx64.bat脚本重新编译jar文件。
(并使用文档中所述的x64版本的JaveExe.exe。)
我做了这些事情,但是Example3服务仍然无法启动,并显示错误消息,
“该系统找不到指定的文件。”
从compilx64.bat生成的.jar文件与x86版本基本相同,但很少
包含的.class文件要大几个字节。我假设代码因此必须引用本地库?也许找不到?但是哪一个呢?
当我键入sc qc Example3时,我得到:
类型::10 WIN32_OWN_PROCESS
START_TYPE:2 AUTO_START
ERROR_CONTROL:1正常
BINARY_PATH_NAME:“ [...文件路径...] \ JavaExe \ JavaExe \ doc \ examples \ 3-Service \ Example3.exe” __RunService__
LOAD_ORDER_GROUP:0
DISPLAY_NAME:JavaExe:Example3
依赖:事件日志
SERVICE_START_NAME:LocalSystem
最佳答案
回答:
Example3.exe的文件路径在网络驱动器上。
要从网络驱动器运行Windows服务是不可能的,或者需要相当大的扭曲。例如,
Map a network drive to be used by a service
当我将所有内容移到本地C:驱动器时,它都起作用了。
谢谢bb67所提供的提示,以帮助您弄清这一点。
关于java - Windows Service无法在JavaExe下启动:已更新,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22775248/