我在许多论坛中读到,由于没有用户登录,因此无法从服务访问映射驱动器。
问题 1)我尝试将我的服务作为登录 - 作为某个帐户,我将我的网络驱动器映射到该帐户中。该服务仍然无法访问它。为什么?
问题 2)从同一个服务,我调用另一个进程。该进程将在哪个用户帐户下运行?
谢谢
我在许多论坛中读到,由于没有用户登录,因此无法从服务访问映射驱动器。
问题 1)我尝试将我的服务作为登录 - 作为某个帐户,我将我的网络驱动器映射到该帐户中。该服务仍然无法访问它。为什么?
问题 2)从同一个服务,我调用另一个进程。该进程将在哪个用户帐户下运行?
谢谢
1) 改用 UNC 路径,然后您不需要访问映射的驱动器号。至于为什么即使在同一个帐户中运行也无法访问它们,如果没有看到您的实际代码,很难确定。
2)这取决于您如何启动该过程。如果您使用ShellExecute()
or CreateProcess()
,那么它将在调用线程的用户帐户中运行。如果您使用CreateProcessAsUser()
、CreateProcessWithLogonW()
或CreateProcessWithTokenW()
,则它会在您传入的用户帐户中运行。
我在服务模式下运行 JBoss 时遇到了类似的问题,即使我在将“登录为:”选项更改为映射驱动器的同一用户之后执行服务,我的 Java 代码也无法访问映射驱动器。
然后我发现如果我可以使用相同的服务映射驱动器,那么它应该可以工作。
最后,在 service.bat 文件顶部添加一个简单的命令即可解决问题。
net use x: \\SERVERNAME\SHARENAME
服务无权访问 XP 及更高版本上的映射驱动器,因为映射驱动器是每个用户的资源,因此它们取决于谁登录。由于可能没有人登录,因此可能没有映射的驱动器驱动器。
您的服务可能会映射驱动器本身。