Windows用户名在哪里存储在xp ...?

时间:2012-03-20 05:43:06

标签: vb.net windows-xp

我正在编写一个应用程序,用于在C:\ Documents and Settings \ user accounts \ Application Data文件夹中搜索特定文件。现在我试图使这个应用程序通用。我可以在特定用户应用程序数据文件夹中进行此应用程序搜索。但我试着做的是从某个文件或Windows XP存储它的地方获取用户名。然后让它搜索该用户。有没有特别的方法来做到这一点。

需要意见和建议。

3 个答案:

答案 0 :(得分:0)

用户名存储在Windows注册表中或使用可以获取FolderNames,因为C:\Documents and Settings包含具有用户名的每个文件夹

答案 1 :(得分: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

答案 2 :(得分:-2)

net user
从命令提示符

将返回所有用户的列表...可能比您要求的更多。最好的办法是按照你的文件和设置做你已经计划好的事情。