2012-03-20 49 views
0

我正在編寫一個應用程序,用於在C:\ Documents and Settings \ user accounts \ Application Data文件夾中搜索特定文件。現在我正在試圖使這個應用程序通用。我可以在特定用戶應用程序數據文件夾中進行此應用程序搜索。但我試着做的是從某個文件或Windows XP存儲它的地方獲取用戶名。然後讓它搜索該用戶。有沒有特定的方法來做到這一點。哪裏是Windows用戶名存儲在xp ...?

需要意見和建議。

+0

.Net提供了各種方法來做這種事情。你需要對你想要的更具體。你說你是通用的,但是你會讓它變得複雜。你爲什麼不用當前登錄的用戶? – Nilpo 2012-03-20 05:56:14

+0

但我想以管理員身份運行它。當作爲管理員我想檢查每個用戶的應用程序數據文件夾的某個文件。 – arya 2012-03-20 06:03:43

+0

然後迭代文檔和設置下的每個文件夾以查找其應用程序數據文件夾。或者從註冊表中枚舉它們。 – Nilpo 2012-03-20 06:09:18

回答

0

用戶名存儲在Windows註冊表或使用能得到FolderNames爲C:\Documents and Settings包含了每一個文件夾在命令提示符下輸入用戶名

+0

確實註冊表存儲用戶信息,但這只是錯誤的方式。文檔和設置下的文件夾名稱不一定與配置文件名稱相匹配。 – Nilpo 2012-03-20 05:57:17

+0

實際上在Windows註冊表中存儲的用戶名稱。你能告訴我一個方向 – arya 2012-03-20 06:04:31

+0

但是'net user'命令只會顯示很少的用戶 – 2012-03-20 06:12:11

-2
net user 

將返回所有用戶的列表...可能比你更'要求。您最好的選擇是按照您計劃使用「文檔和設置」執行的操作。

0

這裏的問題是,Microsoft沒有提供直接執行此操作的API方法。也許這是一個疏忽。話雖如此,你找到的任何解決方案都將是某種解決方法,並將呈現某種限制。

使用註冊表來獲取此信息不是由Microsoft正式支持,因此,可能無法繼續前進。

在用戶配置文件夾中迭代是不可靠的,因爲該文件夾並不總是以其用戶命名並且因爲您可以更改其位置。

依此類推。

所有這一切,我使用WMI和註冊表的組合來實現這一點。這就是它在VBScript中的樣子,你應該能夠適應你的需求。

' Create some arrays to hold the data. 

arrUsers = Array() 
arrSIDs = Array() 
arrAppDataFolders = Array() 

' Get a list of all the non-system users with their SID 
strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2" 
Set colUsers = objWMIService.ExecQuery _ 
    ("Select * from Win32_UserAccount Where Status = 'OK'") 

i = 0 
For Each objUser in colUsers 
    ReDim Preserve arrUsers(i) 
    ReDim Preserve arrSIDs(i) 
    arrUsers(i) = objUser.Name 
    arrSIDs(i) = objUser.SID 
    i = i + 1 
Next 

Set colUsers = Nothing 
Set objWMIService = Nothing 

    ' Now go to the registry and get the Document folder location using the SID 
Const HKEY_USERS = &H80000003 

Set objRegistry = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" _ 
    & strComputer & "\root\default:StdRegProv") 

ReDim arrAppDataFolders(UBound(arrSIDs)) 
For i = 0 to UBound(arrSIDs) 
    strKeyPath = arrSIDs(i) & "\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" 
    strValueName = "AppData"  ' or "Local AppData" 
    intReturn = objRegistry.GetExpandedStringValue HKEY_USERS, strKeyPath, strValueName, strValue 
    If (intReturn = 0) And (Err.Number = 0) Then 
     arrAppDataFolders(i) = strValue 
    Else 
     arrAppDataFolders(i) = vbNull 
    End If 
Next 

Set objRegistry = Nothing