服务(Service)的概念及常见问题
作者:非凡
概念:
1. 只在Windows NT以上的版本中才有服务。
2. 用服务管理器(SCM)来管理服务(启动、停止、禁用等)
3. 服务的启动方式:
a) 自动:当操作系统启动后自动启动,在登录前就已经启动
b) 手动:必须手工启动。
4. 服务所用的账号:SYSTEM(系统账号)
常见问题:
1. 账号问题:在服务中直接调用GetUserName得到的账号是SYSTEM,如果想得到当前登录用户的账号,必须模拟用户。
2. 服务启动的程序问题:在服务中直接调用CreateProcess或者ShellExec启动的进程还是服务,即该进程运行在SYSTEM账号下,如果想启动用户进程,需要使用CreateProcessAsUser。
3. 注册表:在服务中访问HKEY_CURRENT_USER注册表键下的值,通过regedit一般看不到,如果想访问当前登录用户的注册表,必须模拟用户,并且还要注意先关闭HKEY_CURRENT_USER键,即RegCloseKey(HKEY_CURRENT_USER)。
4. 访问文件:在服务中访问文件最好是给出文件的全路径,因为服务是由系统启动的,所以当前的路径不是exe文件的路径。
5. UI显示:一般情况下,不在服务中显示UI,而应该由服务启动用户进程来显示UI。如果必须在服务中显示UI,则需要在安装服务时,把服务的属性加上SERVICE_INTERACTIVE_PROCESS。
6. 删除服务:用API删除,不用命令行参数。