我有一个应用程序,一直在用户(管理员)帐户中运行,现在正尝试将其作为服务运行。
现在的问题是,当我将应用程序作为服务运行时,它无法找到相对于其自身位置的某些文件。另一个问题是,它似乎不想在其正在使用的套接字上进行通信。
我要开始了解的信息是,当应用程序作为服务启动时,它以 SYSTEM 身份运行。
我正在寻找一种方法来明确指定其路径和安全上下文。我已经设置了防火墙规则,以允许此应用程序在所有配置文件(域、私有、公共)上进行任何传入和传出流量连接。
答案1
听起来应用程序实际上并非设计为以服务方式运行,而您正试图“强制”它运行。您必须使用“SRVANY”之类的命令才能让应用程序以服务方式运行。
首先,我会创建一个运行服务的帐户,赋予该帐户对相应文件/文件夹的权限,并在该帐户下运行服务。您可以在服务属性的“登录”选项卡上设置运行服务的帐户。
服务控制管理器本身或使用 SRVANY(或我所知道的任何第三方 SRVANY 类型实用程序)均没有机制在启动服务之前设置当前目录。您可能能够将服务“包装”在 CMD 脚本中并执行该脚本(即,将 SRVANY 启动的映像设置为“%SystemRoot%\System32\cmd.exe”,为其提供参数“/c name-and-path-of-script.cmd”,然后在该脚本中更改目录并执行目标程序),但我认为这不太可能成功。
答案2
假设您正在使用 SRVANY,您可以使用 设置起始路径HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<name>\Parameters\AppDirectory
。(或者,至少您可以在 2003 下这样做。)