呃...可悲的是,簡短的回答是否定的。如果Python程序是作爲Windows服務運行的,這裏有很多複雜的問題......所以讓我解釋一下。
首先,爲了甚至允許服務程序本身訪問網絡,它必須在允許網絡訪問的用戶帳戶下運行。 SYSTEM帳戶已禁用(所有網絡訪問均被禁止),但您可以使用「NETWORK SERVICE」帳戶(在域環境中,該帳戶實際上是計算機的域帳戶)或其他實際用戶帳戶。
但是你不能在服務帳戶中映射驅動器,因爲它不會加載用戶配置文件,包括「映射」到驅動器盤符的能力。 (從技術上講,如果服務運行CMD批處理文件,該腳本可以映射一個驅動器盤符並使用它,但是它不會持續下一次登錄......但是從來不會這樣)。相反,任何程序想要通過UNC路徑訪問網絡(如\ SERVERNAME \ SHARENAME)。
最後,無法爲「所有用戶」製作驅動器映射 - 映射驅動器對每個用戶配置文件都是唯一的(即使它使用相同的字母指向相同的服務器共享)。如果您有多個用戶登錄到計算機(例如,在終端服務器上,或者用戶和服務在另一個用戶帳戶下運行),他們無法共享映射驅動器 - 每個用戶都必須擁有自己的映射驅動器。
但是,您可以這樣做:製作一個登錄腳本(或組策略等),將驅動器與期望的字母(比如說「M:」)映射到服務器共享(\ server \分享)。如果此腳本在登錄時爲每個用戶運行,則它們都具有相同的映射。然後當程序運行即服務需要訪問該共享時,它必須使用UNC路徑(當然還有一個具有適當權限的用戶帳戶)。
希望有幫助!
顯然,系統沒有完全禁止網絡訪問 - 我已經能夠使用WNetAddConnection2進行到遠程服務器的連接,並使用該連接複製文件 - 我只是不能操縱用戶環境映射驅動器。 – 2010-07-13 04:16:55
此外,使用登錄腳本是一個很好的主意......這可能對我有用。 :-) – 2010-07-13 04:18:22
令人驚訝的是,SYSTEM帳戶允許一些出站連接......至少不是*應該*。非常適合Micro $ oft的安全沙箱! – ewall 2010-07-13 13:45:44