我有一项服务需要以不同于“本地系统”的用户身份启动
我需要将用户特定的 PATH 添加到默认路径中,以使服务正常工作。
默认 PATH 是 A;B;C; 我已经设置了用户 PATH X; 以便当用户以交互方式登录时,有效 PATH 是 A;B;C;X; 这是通过设置 HKEY_USERS\XXXXXXX\Environment\Path 完成的
所有路径都在本地硬盘上。
当服务以用户身份启动时,我可以使用 ProcMon 观察它搜索所需的 DLL。当作为服务启动时,它只搜索 A;B;C;。
我尝试将服务类型从 0x10 更改为 0x110,这应该允许桌面交互,看看是否会加载用户环境,但似乎没有帮助。
启动服务时,Windows 是否应为用户加载环境设置?如果这是默认行为,是否有解决方法?
谢谢
答案1
MS 有一个将任何程序作为服务运行的程序。其中一个参数是HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<name>\Parameters\AppDirectory
,尽管这可能只适用于这些包装的服务。
答案2
它是 Windows Server 2003 特有的,但我仍然认为这可以回答您的问题:http://support.microsoft.com/kb/887693
答案3
您是否尝试过使用 SRVANY 将批处理文件等脚本转换为服务,并在调用所需应用程序之前在那里设置环境?注意:如果脚本后台运行后续进程并退出,您可能会让步服务停止/启动/重新启动控制,因为服务控制器将检查脚本本身是否正在“运行”。您还可以考虑从脚本中的用户注册表中读取 PATH 并使用其内容,以便环境不会硬编码在脚本本身中。
答案4
只是为了结束这一切。
我以通用格式编写了此内容,因为我怀疑我正在处理通用的 Windows 服务问题。
但事实证明这是服务可执行文件本身的问题。系统路径和用户路径的读取似乎在某种程度上依赖于服务可执行文件。
我有来自同一供应商的两项服务,其中一项读取系统和用户路径,而另一项只读取系统路径。