在 Process Explorer 下查看进程时,服务程序,它有几个进程管理器子进程。每个进程都承载一个或多个服务。但是,单个进程中的服务选择似乎完全是随机的。
进程如何选择它所承载的服务?这会受到某种影响吗?
我找不到任何控制这个服务管理器。
我想强制将一些服务纳入它们自己的进程,与其他服务分开。
答案1
注册表中有一个数据库用于控制如何加载服务。这就是服务控制管理器数据库。
服务控制管理器运行 services.exe。服务在注册表中的 HKLM\SYSTEM\CurrentControlSet\Services 下定义。Type
服务条目的值指定它是在其自己的进程中加载还是在承载多个服务的进程中加载。
当 SCM 决定启动服务时,它会调用 ScStartService。ScStartService 通过ImagePath
从服务的注册表项中读取值来确定运行服务进程的文件的名称。该ImagePath
值还包含组的名称。然后它检查该Type
值。值 0x20 表示共享进程。
要回答有关如何使服务在其自己的进程中运行的问题,请使用命令sc config
。
例如:sc config wuauserv type= own
= 后的空格是必需的。
答案2
你不会发现控件在 services.msc 中,但每个服务将在特定的用户/服务帐户下启动,该帐户根据服务的要求具有特定的权限。
服务控制面板中的“登录身份”栏将显示特定服务所使用的服务帐户。您会注意到,svchost.exe
任务管理器中的每个服务似乎都来自不同的用户帐户。
这些账户将决定哪个svchost.exe
账户托管每个服务。
从技术上讲,有一些控件可以更改svchost.exe
托管特定服务的内容,因为您可以在服务属性的“登录”选项卡中更改服务登录的用户。但我不建议更改它们,因为您最终可能会以错误的顺序启动服务或没有所需的权限。