繁体   English   中英

使用Python服务映射网络驱动器

[英]Map network drive with a Python service

(沿着这些思路还有其他问题,但是它们都没有真正的答案,更不用说处理python的答案了……)

我有一个用Python编写的Windows服务(XP SP3),该服务需要能够为所有用户安装网络驱动器。 我尝试将net usesubprocess进程一起net use (甚至使用net.exe的完整路径),但是鉴于您的服务是以SYSTEM用户身份运行的,因此net对您非常不满意(它抱怨缺少用户上下文)。 可能有一种通过WMI进行此操作的方法,但我一直无法弄清楚。

编辑 :实际上,也许您不能使用WMI做到这一点。 本文似乎表明该功能在WSH中可用,但在WMI中不可用。 也许某种方式可以使用netmap做到这一点?

呃...可悲的是,简短的回答是“否”。 如果Python程序作为Windows服务运行,则这里有多种复杂性...所以让我解释一下。

首先,为了甚至允许服务程序本身访问网络,它必须在允许网络访问的用户帐户下运行。 SYSTEM帐户已用完(禁止所有网络访问),但是您可以使用“ NETWORK SERVICE”帐户(在域环境中,它实际上是计算机的域帐户)或另一个实际的用户帐户。

但是您将无法在服务帐户中映射驱动器,因为它不会加载用户配置文件内容,其中包括“映射”到驱动器号的功能。 (从技术上讲,如果该服务正在运行CMD批处理文件,则该脚本可以映射驱动器号并使用它,但是对于下一次登录,该脚本将不是持久性的……但不要紧记。)相反,该程序可以执行任何操作要进入网络,应通过UNC路径(例如\\ SERVERNAME \\ SHARENAME)进行访问。

最后,不可能使驱动器映射“为所有用户”工作-映射的驱动器对于每个用户配置文件都是唯一的(即使它使用相同的字母指向相同的服务器共享)。 如果您有多位用户登录到计算机(例如,在终端服务器上,或者用户和服务在另一个用户帐户下运行),则这些用户无法共享映射的驱动器-每个用户都必须拥有自己的驱动器。

但是,您可以执行以下操作:创建一个登录脚本(或组策略等),该脚本将带有预期字母(例如,假设为“ M:”)的驱动器映射到服务器共享(\\ server \\ share)。 如果此脚本在登录时为每个用户运行,则它们都将具有相同的映射。 然后,当您的程序作为服务运行时需要访问该共享时,就必须使用UNC路径(当然还有具有适当特权的用户帐户)。

希望有帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM