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