在Windows XP Professional 32位上,我已经成功地使用Win32::Daemon创建了带有回调函数的Windows服务。但这在64位上不起作用。
我看到了这个http://nssm.cc/usage并使用它创建了一个服务,但它不能保持状态并且会出错。如果有人有一个正确的示例,那就太好了...
非常感谢任何想法。
我现在已经解决了这个问题。
现在我的perl脚本已经可以在Windows 7 64位系统上作为Windows服务运行。
基本上,win32::Daemon可以在Win 7 64位上工作,但是服务创建需要手动完成。即,回调函数和启动都正常。
这里有一个从头开始创建perl windows服务的例子:
创建文件夹c:/myservice
从这个链接中复制代码示例,并将其保存到上述目录中。将其命名为myservice.pl (http://www.roth.net/forums/topic.php?id=106)
在脚本中的print hello语句后添加以下两行。
$Context->{last_state} = SERVICE_RUNNING;
Win32::Daemon::State( SERVICE_RUNNING );
这是必要的以保持服务运行。否则它会停止。
以管理员模式打开Dos cmd终端。使用以下命令创建服务
% sc create myservice binpath= "c:\strawberry\perl\bin\perl.exe"
成功时它将显示以下消息。 [SC] CreateService SUCCESS
现在我们需要编辑注册表。打开注册表编辑器。(开始->然后键入regedit)
在HKEY_LOCAL_MACHINE-> SYSTEM-> CurrentControlSet-> Services-> myservice下查找服务
单击“myservice”并将imagePath变量编辑为: c:\strawberry\perl\bin\perl.exe -I "C:\myservice" "C:\myservice\myservice.pl" --run
现在打开服务窗口并启动服务。(开始->控制面板->管理工具->服务)
在脚本的当前目录中,每隔几秒钟就会创建并更新一个日志文件。如果在Windows上使用cygwin,可以使用tail跟踪它。
% tail -f *.log
进程会周期性地打印Hello!
谢谢。