Javascript 有人能帮我使用以下JScript吗?
在Vista中,我试图获取本地计算机上用户帐户(当前用户除外)的“本地AppData”路径,但遇到了一些问题。谁能帮我一下下面的代码有什么问题吗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" + "\\"
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完全相同(实际上我不确定区别是什么)