2011-05-04 164 views
1

在Vista中,我試圖在本地機器上爲用戶帳戶(當前用戶除外)獲取「本地應用程序數據」路徑,但面臨一些問題。任何人都可以幫助我下面的代碼有什麼問題。任何人都可以使用以下JScript幫助我嗎?

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%值。

+1

社區用戶已經足夠爲您設置代碼格式。請查看[如何在StackOverflow上格式化代碼](http://meta.stackexchange.com/questions/22186/how-do-i-format-my-code-blocks)以確保您提供代碼以幫助者易於閱讀的格式。 – Dutchie432 2011-05-04 19:29:35

回答

0

USERPROFILE是一個環境變量,將取代%USERPROFILE%以獲取它在此計算機上的正確位置。它從計算機變成計算機。

要查看所有環境變量鍵入命令shell「設置」,或進入「控制面板」 - >「系統設置」 - >「高級」>環境變量

+0

%USERPROFILE%環境值不是一個c:\ windows \ system32 \ config \ systemprofile。當我檢查時,當前進程的userprofile的值是c:\ users \ admin。無法理解此係統配置文件字符串的來源 – svv 2011-05-04 19:38:34

+0

當您打開註冊表編輯器時,您瀏覽到哪個分支?你必須去HKEY_USERS \ [xyz用戶名] \軟件\ ... – ariel 2011-05-04 19:46:21

+0

亞..我只會去HKU_USERS \ Xyz分支。但我加載xyz thru reg load的配置單元,我的當前進程正在與admin用戶一起運行。這就是爲什麼%userprofile%的值是c:\ users \ admin而不是c:\ users \ stduser – svv 2011-05-04 19:51:15

0

GetExpandedStringValue自動替換包含在任何環境變量註冊表值數據與這些變量的實際值。很可能,%USERPROFILE%擴展爲C:\ Windows \ system32 \ config \ systemprofile而不是C:\ users \ admin因爲WMI服務本身在本地系統帳戶下運行。

你需要讓你的腳本的工作是:

  • 使用GetStringValue代替GetExpandedStringValue讀取未展開Local AppData值,

  • 通過閱讀獲取需要的用戶的配置文件路徑ProfileImagePath value from HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileList\<user_SID> key,

  • 做一個字符串替換用%USERPROFILE%替換爲pro文件路徑。

你可以找到如何做到這一點在此我回答一個例子:
Getting special Folder path for a given user in Jscript

您可能還需要使用WshShell.RegRead而不是WMI,因爲它更JScript的友好。

+0

不幸的是,在REG_EXPAND_SZ上使用GetStringValue的行爲與GetExpandedStringValue的行爲完全相同(我不確定實際上有什麼區別) – CherryDT 2017-06-07 14:37:24

相關問題