2011-03-22 46 views
0

我有以下代碼:爲什麼將Win32_Shares枚舉爲「LOCAL SERVICE」用戶返回null屬性?

var searcher = new ManagementObjectSearcher("SELECT Name, Path FROM Win32_share"); 
    ManagementObjectCollection coll = searcher.Get(); 

    foreach (var share in coll) 
    { 
     Console.WriteLine("share-path: " + share["Path"] + " share-name:" + share["Name"]); 
    } 

運行它,我,我得到合理的輸出:

share-path: C:\Windows share-name:ADMIN$ 
share-path: C:\ share-name:C$ 
share-path: D:\ share-name:D 
share-path: D:\ share-name:D$ 
share-path: share-name:IPC$ 

服務作爲本地系統用戶運行它,我沒有得到任何路徑屬性:

share-path: share-name:ADMIN$ 
share-path: share-name:C$ 
share-path: share-name:D 
share-path: share-name:D$ 
share-path: share-name:IPC$ 

LOCAL SERVICE應該不能查看共享文件夾路徑嗎?我究竟做錯了什麼? (注:我也嘗試以「網絡服務」運行,結果相同。)

+1

你的意思是本地系統或本地服務? – Lazarus 2011-03-22 12:58:27

+0

它安裝爲「本地服務」,我將其更改爲網絡服務並再次嘗試。我會更新這個問題。 – hometoast 2011-03-22 13:03:02

回答

1

我嘗試使用WinApi NetShareEnum並收到相同的結果。有趣的是,此代碼在Windows 2008 R2上的行爲正確在Windows 2008不工作我還沒有嘗試過早期的平臺。

這似乎像一個權限問題,因爲本地系統帳戶訪問共享的路徑。無盡的測試,並與本地安全設置打沒帶任何結果。我不能使用Regmon中或Filemon的發現任何可疑的活動。我結束了我的應用程序切換到SYSTEM帳戶。

+0

有趣的是R2與「r1」。我重新訪問並切換到本地系統,代碼工作。不過對於這個項目,我只是要求將我正在尋找的股份放入數據庫。 – hometoast 2011-04-23 11:33:38

1

LOCAL SERVICE沒有網絡共享的權利。您需要以具有適當權限的用戶身份運行服務,很可能是擁有股份權利的域用戶。

+0

我也嘗試過NETWORK SERVICE。 – hometoast 2011-04-23 11:29:55

+0

這將無法正常工作。以具有網絡卷權限的用戶身份運行它。 – 2011-04-23 12:34:17