где хранятся имена пользователей windows в xp ...? - PullRequest
0 голосов
/ 20 марта 2012

Я пишу приложение, которое ищет определенный файл в папке C: \ Documents and Settings \ учетные записи пользователей \ Application Data.Теперь я пытаюсь сделать это приложение универсальным.Я могу сделать это приложение для поиска в определенной папке данных приложения пользователя.Но то, что я пытаюсь сделать, это взять имя пользователя из определенного файла или места, где его хранит windows xp.Затем сделайте поиск для этого пользователя.Есть ли конкретный способ сделать это.

Нужны идеи и предложения.

Ответы [ 3 ]

0 голосов
/ 20 марта 2012
net user

из командной строки вернет список всех пользователей ... вероятно, больше, чем вы просите.Лучше всего делать то, что вы уже планировали делать со своими документами и настройками.

0 голосов
/ 20 марта 2012

Проблема здесь в том, что 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
0 голосов
/ 20 марта 2012

Имена пользователей хранятся в реестре Windows или могут использоваться для получения имен папок, так как C:\Documents and Settings содержит каждую папку с именем пользователя

...