制作一个jruby程序的Windows服务

时间:2013-03-11 18:12:37

标签: windows-services

我有一个JRuby程序,我想成为一个Windows服务。我已经看到了使用Ruby创建服务的一些事情,但我们不想在客户机上安装ruby。它似乎在JRuby中不受支持。

我创建了一个虚拟程序来试试这个:

path = "C:/tmp/my-svc.log"

if File.exists?(path)
    File.open(path,"a"){|f| f.write(" called again\n")}
else  
    File.open(path,"w"){|f| f.write(" called first time\n")}
end

while true do   
    sleep 5
    puts 'I am a service'
end

我这样做了:

Z:\ play&gt; sc.exe创建“larz service 2.1”binpath =“C:\ jruby-1.6.7.2 \ bin \ jruby -SZ:\ play \ my-win-svc.rb”start = auto < / p>

[SC] CreateService SUCCESS

尝试启动它我遇到了这个错误:

Z:\ play&gt; sc start“larz service 2.1”

[SC] StartService FAILED,错误193。

Z:\ play&gt; sc查询“larz service 2.1”

SERVICE_NAME: larz service 2.1`
TYPE               : 10  WIN32_OWN_PROCESS`
STATE              : 1  STOPPED
WIN32_EXIT_CODE    : 0  (0x0)
SERVICE_EXIT_CODE  : 0  (0x0)
CHECKPOINT         : 0x0
WAIT_HINT          : 0x0

我已经在网上看到了很多关于创建Windows服务的不同方法的帖子,使用initsrv.exe,powershell,运行CMD,编辑注册表等等,但我不确定究竟发生了什么,或者我是不是需要调用一些API。看起来好像其他方法没有添加任何特定的启动参数。另外,我在测试服务的开头添加了代码来写入/ tmp中的文件,并且文件没有被写入,因此当我尝试启动程序时,它实际上从未被执行过。

谢谢..


好的,所以我走得更远,但仍然神秘莫测

Z:\ play&gt; sc config“larz service 2.2”obj = EEE \ lgud password =“Ssssssss @”

[SC] ChangeServiceConfig SUCCESS

Z:\ play&gt; sc start“larz service 2.2”

[SC] StartService FAILED 1069:

由于登录失败,服务未启动。

似乎我为user / pw输入了正确的格式,因为有时它在config命令上出错了。

1 个答案:

答案 0 :(得分:0)

如果您确信密码正确,则您指定的用户可能没有正确的权限作为服务运行。尝试在Windows服务应用程序(services.msc)Log On tab上输入帐户信息,以便在该用户出现问题时通知您。

但除此之外,我不知道如果没有安装Ruby,你将如何实现这一目标。您的服务的可执行路径设置为.rb文件 - 如果不是Ruby,您希望Windows启动哪个应用程序来运行该文件?