Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在没有包装器的情况下从java应用程序创建服务(windows)?_Java_Service_Wrapper - Fatal编程技术网

如何在没有包装器的情况下从java应用程序创建服务(windows)?

如何在没有包装器的情况下从java应用程序创建服务(windows)?,java,service,wrapper,Java,Service,Wrapper,我见过很多人询问如何使java应用程序成为服务,答案总是包装器(即JSW) 我想知道是什么使java应用程序转变为服务,以及如何在没有包装器的情况下实现它 我并不是想重新发明轮子,它只是让我觉得不处理这个问题背后的概念“更弱”。看看: “Java本身不支持创建系统服务” Windows不是Lunix。Linux服务只是一个shell脚本,它实现了启动、停止、重启等选项。Windows服务是实现定义良好的接口的本机组件。JVM没有实现这样的接口,所以您需要能够实现它并运行java的东西 有几个这样

我见过很多人询问如何使java应用程序成为服务,答案总是包装器(即JSW)

我想知道是什么使java应用程序转变为服务,以及如何在没有包装器的情况下实现它

我并不是想重新发明轮子,它只是让我觉得不处理这个问题背后的概念“更弱”。

看看:

“Java本身不支持创建系统服务”


Windows不是Lunix。Linux服务只是一个shell脚本,它实现了启动、停止、重启等选项。Windows服务是实现定义良好的接口的本机组件。JVM没有实现这样的接口,所以您需要能够实现它并运行java的东西


有几个这样的组件。我了解JavaService和Apache守护进程,并建议您使用它们。我不认为有什么“更弱”的东西,我也不认为提到的解决办法太重。JavaService只是一个小DLL。

Java不编译为本机可执行文件(.exe文件用于!indows或Linux elf可执行文件)。执行Java类的唯一方法是在Java虚拟机中,这就是为什么在启动Java应用程序时键入
Java-cp Main
。这也是Java二进制文件可以在多个平台上执行的原因,无论是哪个平台创建了类和jar文件

服务只是操作系统在某个时间点(例如在启动时)启动的可执行文件。创建这样的服务与Java是完全分开的,因为它们是一个操作系统问题。如果你想了解更多关于服务的信息,我建议你在相关网站上查找“服务”的创建(或者你正在使用的任何平台称之为服务)。您甚至可以查看现有包装器库的源代码以了解详细信息,但不可避免地必须使用Java以外的语言来实现操作系统的服务


使用现有的包装器库至少可以避免对其他语言进行本机编码,这并没有缺点。正如您所说,不要重新发明轮子。

如果您想知道为什么需要这些包装器,您可以查看它们的源代码(其中一些是开源的)

通常用于运行应用程序的可执行文件(
java.exe
javaw.exe
)没有处理运行服务所需的信号。特别是,虽然启动应用程序很容易,但通知服务应用程序它需要停止并重新启动是另一回事。在应用程序运行时,您需要一些东西来捕获这些通知,如果这不是一个突然的进程终止,当然会更好

除了服务的注册方面,服务包装器还实现了一些JNI功能,以使您的应用程序意识到它是一个服务。(据我所知,他们也倾向于使用JVM DLL而不是可执行文件。)

看一看这个例子。它有本机部分和Java部分


此外,服务还需要了解某些技巧。例如,.

创建本地服务,我认为这是不可能的。使服务“像”应用程序需要一些工作,但这是可能的。问题是,你需要额外的工作吗(比如写线程锁和监视器来停止/暂停/恢复/启动服务。将服务安装在正确的位置,让它在系统启动时运行…和用户权限???)这只是知识饥渴。我同意,但我想知道“是什么让java应用程序变成服务”,那么wapper对应用程序的基本作用是什么呢?包装器在后台启动和维护您的服务。它还提供了一个与您的服务交互的接口。我会用谷歌搜索“服务vs应用”,他们有不同的意图。谢谢你,亚历克斯,我会投你一票,但我仍然没有我的声誉。因此,包装器基本上会作用于二进制文件,并像服务一样执行它?@FeleMed您应该“接受”您认为最有用的答案。非常感谢您的回答。