我有一个Python程序,该程序通过网络驱动器中的FS访问文件。当我从控制台运行此程序时,一切都很好。当相同的程序作为用NSSM包装的服务运行时'尝试不同的解决方案,包括以所有权限为管理员用户运行该服务,但错误仍在继续。
该回答引用GPT与博主@晓码自在合作编写:
从您的描述,此问题似乎是Python程序作为Windows服务运行时无法访问网络驱动器导致的。这是因为:
Windows服务运行在svchost.exe中,以NETWORK SERVICE身份运行,默认不具有访问网络资源的权限。所以,您的Python程序作为服务运行时无法访问网络驱动器。
要解决此问题,有几个方法:
- 为服务账户分配对网络驱动器的访问权限。这需要:
- 找到服务使用的账户,通常为NETWORK SERVICE。
- 右键单击网络驱动器,选择“属性”。
- 选择“安全”选项卡,点击“编辑”按钮。
- 添加服务的账户,并勾选“完全控制”权限。
- 重新启动Windows服务,即可访问网络驱动器。
- 使用域帐户或本地管理员帐户运行服务。这需要:
- 创建一个域用户帐户或本地管理员用户。
- 以该用户身份登录,安装Python和相关依赖。
- 使用NSSM工具配置服务,选择“专用帐户”选项,输入新创建的用户帐户。
- 重新启动Windows服务,即可访问网络驱动器。
- 为服务的二进制文件和相关文件夹分配权限。这需要:
- 找到服务使用的二进制文件(如Python.exe)和相关文件夹(如Python安装目录)。
- 右键单击,选择“属性”。
- 选择“安全”选项卡,点击“编辑”按钮。
- 添加您的用户帐户并勾选“完全控制”权限。
- 重新启动Windows服务,即可访问网络驱动器。