Javascript 有人能帮我使用以下JScript吗?

Javascript 有人能帮我使用以下JScript吗?,javascript,windows-vista,special-folders,Javascript,Windows Vista,Special Folders,在Vista中,我试图获取本地计算机上用户帐户(当前用户除外)的“本地AppData”路径,但遇到了一些问题。谁能帮我一下下面的代码有什么问题吗 var HKU = 0x80000003; var username = "xyz"; //Loading registry hive of user xyz var WshShell = new ActiveXObject("WScript.Shell"); var LoadHiveCmd = "REG LOAD " + "HKU" + "\\"

在Vista中,我试图获取本地计算机上用户帐户(当前用户除外)的“本地AppData”路径,但遇到了一些问题。谁能帮我一下下面的代码有什么问题吗

var HKU = 0x80000003; 
var username = "xyz";

//Loading registry hive of user xyz
var WshShell = new ActiveXObject("WScript.Shell");
var LoadHiveCmd = "REG LOAD " + "HKU" + "\\" + username + " \"" + "c:\\users\\xyz\\NTUSER.DAT" + "\"";
var oExec = WshShell.Exec(strLoadHiveCmd); 

var oReg = GetObject("WinMgmts:/root/default:StdRegProv"); 

var profileRegPath = username  + "\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders";

var method, inparams, outparams;  

method = oReg.Methods_.Item("GetExpandedStringValue");
inparams = method.InParameters.SpawnInstance_();
inparams.hDefKey = HKU;
inparams.sSubKeyName = profileRegPath ;
inparams.sValueName =  "Local AppData";

outparams = oReg.ExecMethod_(method.Name, inparams);
var appDataPath= outparams.sValue;   
此处注册表中的appDataPath值为
%USERPROFILE%\AppData\Local

但是我得到了一个值
C:\Windows\system32\config\systemprofile\AppData\Local


我不明白值
c:\windows\system32\config\systemprofile
是从哪里来的,以及它是如何替换
%USERPROFILE%
值的。

USERPROFILE是一个环境变量,将替换%USERPROFILE%,以获取它在此计算机上的正确位置。它随着计算机的变化而变化


要查看命令外壳上的所有环境变量,请键入“set”,或转到“控制面板”>“系统设置”>“高级”>环境变量

GetExpandedStringValue
自动将注册表值数据中包含的任何环境变量替换为这些变量的实际值。很可能,%USERPROFILE%扩展为C:\Windows\system32\config\systemprofile,而不是C:\users\admin,因为WMI服务本身在本地系统帐户下运行

让脚本正常工作所需的是:

  • 使用
    GetStringValue
    而不是
    GetExpandedStringValue
    读取未展开的
    Local AppData

  • 通过从
    HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileList\
    键中读取
    ProfileImagePath
    值,获取所需用户的配置文件路径

  • 执行字符串替换以将%USERPROFILE%替换为配置文件路径

您可以在我的回答中找到一个如何做到这一点的示例:


您可能还希望使用WMI而不是WMI,因为它对JScript更加友好。

社区用户很好地为您格式化了代码。请查看,以确保以易于阅读的格式为助手提供代码。%USERPROFILE%环境值不是c:\windows\system32\config\systemprofile。当我选中时,当前进程的userprofile的值是c:\users\admin。无法理解此系统配置文件字符串的位置打开注册表编辑器时,浏览到哪个分支?您必须转到HKEY_用户[xyz用户id]\Software\…ya。。我只去香港大学用户学院Xyz分校。但我正在通过reg load加载xyz配置单元,并且我当前的进程正在使用admin user运行。这就是为什么%userprofile%的值是c:\users\admin而不是c:\users\stduseryes,只有使用用户帐户登录时,userprofile才会获得正确的值。不幸的是,GetStringValue在
REG\u EXPAND\u SZ
上使用时,其行为与GetExpandedStringValue完全相同(实际上我不确定区别是什么)