2009-11-05 75 views

回答

1

在研究了一点之后,我相信没有办法使用环境变量来捕获另一个用户的%TEMP%文件夹(在本例中是系统用户)的位置。

1
Set objShell = CreateObject("WScript.Shell") 
Set colEnvironment = objShell.Environment("PROCESS") 
objPath = colEnvironment("temp") 
WScript.Echo objPath  

在这种情况下

Set objShell = CreateObject("WScript.Shell") 
Set colEnvironment = objShell.Environment("PROCESS") 
objPath = colEnvironment("windir") 
WScript.Echo objPath & "\temp"  

希望这将有助于

+0

这似乎仍然是返回“我的”临时目录。而不是系统目录。例如在WinXP上我期待得到“C:\ WINSOWS \ Temp”而不是我自己的临时目录。 – Mike 2009-11-05 12:09:13

+0

“windir”是否与其他操作系统一致? Server2008上运行的服务仍然使用%winddir%\ Temp? – Mike 2009-11-05 12:15:31

+0

您也可以使用“systemroot”而不是“windir”。这些都是系统默认的环境变量,据我所知,这不应该随着新版本的Windows而改变,否则在升级服务器时,所有以前安装的应用程序(使用这些环境变量)将会失败。 – IsmailS 2009-11-05 13:07:07

-1

在C#中,其...

System.Collections.IDictionary瓦尔=系统.Environment.GetEnvironmentVariables();

String TempPath = Vars [“TEMP”];

你得到的元素...路径,温度,SESSIONNAME,PATHEXT,用户网域,系统驱动,WINDIR等的整个阵列...

+0

在C#中我更喜欢使用:Path。GetTempPath() – Mike 2009-11-05 13:55:15

+0

是的,然而,像这样的东西会向其他人揭露他们可能不知道的更大的一组元素。 System.Environment区域中有很多可用的东西。 – DRapp 2009-11-05 14:38:03

+2

我认为解决方案在vbscript中是必需的。 – IsmailS 2009-11-06 06:44:49

2

在这里你去(在VBS)

Set environmentVars = WScript.CreateObject("WScript.Shell").Environment("Process") 
tempFolder = environmentVars("TEMP") 
msgbox(tempFolder) 

我不知道,如果你的系统中有一个名为“TEMP”环境变量,所以去命令行,然后键入

set 

你会得到环境瓦尔的列表,以及它们的值。选择一个有你的临时文件夹的人。

1

系统环境变量存储在注册表项:HKEY_LOCAL_MACHINE \ SYSTEM \用户ControlSet001 \控制\会话管理\环境

环境变量存储在注册表项中:HKEY_USERS [用户SID] \环境

为了获取任何环境变量(特别是TEMP)的值,需要检查分支中是否存在指定用户的此变量。如果它在那里,那么你可以使用它。如果它不在那里,那么你需要从系统注册表分支获取一个值。