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