在windows系统上注册一个服务通常你要这么做:
首先,如果这个服务程序是你写的话,你必须在程序中编写ServiceMain服务主函数用来启动服务,并且要在程序中注册服务启动函数,函数原型如下。
VOID WINAPI ServiceMain( DWORD dwArgc, LPTSTR* lpszArgv );
然后,你需要修改注册表相关信息,在注册表项"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\"中自动增加项[服务名],并在其下成功添加各个键值:
"DisplayName" =服务显示名 (字符串值)
"Description" =服务描述 (字符串值)
"ImagePath" =应用程序路径 (可扩充字符串值)
"ObjectName" ="LocalSystem" (字符串值)
"Type" =10(16进制) (dword值)
"Start" =2(16进制) (dword值)
"ErrorControl" =1(16进制) (dword值)
或者直接执行instsrv [服务名] [应用程序路径]
,自动添加注册表信息。(不过貌似只有服务器版的windows才有instsrv命令)
完成上述操作后,如果不出意外你可以在服务管理器services.msc中可以看到你的服务。当然你如果想卸载服务,至少得把上面的第二步反过来做一遍,即清理注册表。
现在有一个更好的工具可以完成这项任务,nssm。
nssm是一个命令行工具,也支持gui。
nssm install <ServerName> <Program Path> #安装 nssm remove <ServerName> confirm #卸载
命令行使用
GUI使用(安装)
GUI使用(卸载)
使用nssm来安装windows服务是不需要主程序中注册服务的,也就是说想将一个程序变为服务程序有了nssm后你无需修改代码。