我有一个服务在Windows Server 2008 R2上运行,它需要访问一个webdav映射的驱动器,用于复制文件的依赖关系。 从命令提示符运行净使用时,一切正常。
净使用z: https ://domain.com/webdav/user:thisuser passwd
或从命令提示符运行我的脚本,一个ant构build脚本:
<target name="mapdrive.developer" depends="checkmappeddrive" unless="mapped.drive.present"> <antcall target="disconnect.mapped.drive" /> <echo message="Mapping drive..." /> <exec executable="net"> <arg value="use" /> <arg value="z:" /> <arg value="https://test.com/plugins/servlet/confluence/default" /> <arg value="/PERSISTENT:YES" /> <arg value="/USER:xxxxx" /> <arg value="xxxxx" /> </exec> </target>
是的,这是一个SSL / HTTPS webdav地图。 我知道registry中的系统设置,并安装了WebClient,“桌面体验”。 当从命令提示符login并运行时,一切工作正常。 但是,如果我使用此脚本并从作为本地系统帐户运行的构build服务生成脚本,则该命令会失败,并显示错误:“发生系统错误67”。 我尝试启用“允许服务与桌面交互”,并将“login身份”设置更改为正规用户。 都没有工作。 我已经search过,并发现与用户成功映射驱动器的人类似的问题,但从脚本作为服务,本地系统帐户运行失败。 我无法find解决方法,如果有的话。
任何人在这里find一个工作的解决scheme? 任何信息非常感谢。
弄清楚了。 您必须使用UNCpath从远程源复制并作为本地服务运行。 显然,这是在stackoverflow上回答:
从http://msdn.microsoft.com/en-us/library/ms685143.aspx :
必须访问远程资源的服务(或在不同安全上下文中运行的任何进程)应使用通用命名约定(UNC)名称来访问资源。 该服务必须具有访问资源的相应权限。 如果服务器端服务使用RPC连接,则必须在远程服务器上启用委派。
驱动器号对系统来说不是全球性的。 每个login会话都从A到Z接收自己的一组驱动器号。因此,在不同用户帐户下运行的进程之间不能共享redirect的驱动器。 此外,服务(或在其自己的login会话中运行的任何进程)不能访问在不同的login会话中build立的驱动器号。
服务不应该通过映射的驱动器号直接访问本地或networking资源,也不应该在运行时调用net use命令映射驱动器号。
驱动器号将无法使用。 因此,如果您正在处理来自wedav / https的文件,并启用了ssl,则必须使用UNC映射源文件:
净使用https://test.net/plugins/servlet/confluence/default/user :用户密码
那么当你执行'净使用'时,你会看到以下内容:
C:\Users\Administrator\test>net use New connections will be remembered. Status Local Remote Network ------------------------------------------------------------------------------- \\test.net@SSL\plugins\servlet\conf luence\default Web Client Network The command completed successfully.
我使用robo copy从UNC复制:
robocopy \\test.ney@SSL\plugins\servlet\confluence\default . /z /e