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

时间:2010-07-13 02:23:03

标签: python service wmi

(沿着这些方面还有其他问题,但没有一个有任何真正的答案,更不用说处理python的答案......)

我有一个用Python编写的Windows服务(XP SP3),需要能够为所有用户安装网络驱动器。我尝试将net usesubprocess一起使用(即使使用net.exe的完整路径),但鉴于您的服务以SYSTEM用户身份运行,net对您非常不满意(它抱怨)关于缺乏用户上下文)。可能有办法通过WMI实现这一点,但我无法弄明白。

编辑:实际上,也许你不能用WMI做到这一点。 This article似乎表明此功能在WSH中可用,但在WMI中不可用。也许某种方式可以使用netmap来执行此操作?

1 个答案:

答案 0 :(得分:1)

呃...遗憾的是,简短的回答是否定的。如果Python程序作为Windows服务运行,那么这里有许多复杂因素......所以让我解释一下。

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

但是您无法在服务帐户中映射驱动器,因为它没有加载包含“映射”到驱动器号的功能的用户配置文件。 (从技术上讲,如果服务正在运行CMD批处理文件,那么该脚本可以映射驱动器号并使用它,但是它不会持续用于下一次登录......但是永远不要那么。)相反,任何程序都可以我想通过UNC路径访问网络(如\ SERVERNAME \ SHARENAME)。

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

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

希望有所帮助!