Windows 服务程序中共享文件夹中文件的 stat() 返回错误 -1,并且 errno 为 2(ENOENT)。
共享文件夹所在的系统和运行服务的系统位于同一域中。使用该域中帐户的有效用户名/密码登录服务。
当同一个程序作为 EXE 运行时,stat() 成功返回 (0)。
为什么行为会有差异?如何解决这个问题?
答案1
服务从其自己的上下文运行。该上下文确实不是包括对特定用户拥有的任何共享的访问。这不是权限问题,而是命名空间问题。
有很多可能的解决方法。其中之一是在网络服务帐户下运行该服务。另一种方法是让服务使用适当的系统调用。
我更喜欢的解决方法是使用在用户应用程序上下文中运行的辅助进程。辅助进程可以代表服务执行所有文件 I/O。