2011-08-29 35 views
7

我试图获取的实际值环境变量
这是我到目前为止有:在.NET中获取远程计算机上的环境变量的实际值

这样的作品,但这里的问题:通过“WINDIR”作为名称得到“%SYSTEMROOT%”作为价值。我真的想要实际路径,即'C:\ Windows'。

试图使用递归得到值“SYSTEMROOT”的没有匹配被发现。

我怎样才能确保实际值得到返回?
Thx!

+2

为什么%SystemRoot%不可接受?如果你把它放在资源管理器窗口中,你会去到windows的安装目录。因为%SystemRoot%理论上可以是D:\ Windows \。 –

+0

[如何用.NET远程扩展环境变量?](http://stackoverflow.com/questions/5031111/how-to-expand-environment-variables-remotely-with-net) – VVS

+0

@ Ramhound:I编写一个方法**使用** Win32_Process.Create **在远程机器上运行命令**。 **环境变量不会**得到识别**,所以我期待**自己替换它们**。如果有办法**让他们自动识别**,这将**也解决了我的问题**。 – David

回答

-2

使用Environment.GetFolderPath(Environment.SpecialFolder.System)

+2

问题标题在远程机器上显示。 – TheCodeKing

0

不能使用Win32_Environment这一点,但你可以使用远程注册表。

RegistryKey environmentKey = RegistryKey.OpenRemoteBaseKey(
     RegistryHive.LocalMachine, "\\server"); 
RegistryKey key = environmentKey.OpenSubKey(
     @"SYSTEM\CurrentControlSet\Control\Session Manager\Environment", false); 
string value = (string)key.GetValue("System"); 
2

对于system path variables(如%SystemRoot%)有没有方便的方法。

您必须通过阅读相应的注册表值来查找这些值。

  • 的%SystemRoot%:下面有一个(不完全)的一些系统变量列表

    HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRoot

    select windowsdirectory from Win32_OperatingSystem
  • 的%SystemDrive%可以通过检查的%SystemRoot确定%

变量如%AppData%是用户依赖和下

HKEY_USERS\<user SID>\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\AppData

+0

这会得到%SystemRoot%,但不是**%ProgramFiles%**或其他。 我想我正在寻找一个远程版本的Environment.GetEnvironmentVariable – David

+1

@David:没有远程版本。另一种方法是远程执行'Environment.GetEnvironmentVariable',例如通过在远程机器上启动程序。 – VVS

1

发现我知道它的创意充其量不过这似乎是最简单的解决方案:
开销太大吧?

 using (var process = new Process()) 
     { 
      process.StartInfo.FileName = @"C:\PsTools\PsExec.exe"; 
      process.StartInfo.Arguments = @"\\machineName cmd /c echo " + environmentVar; 
      process.StartInfo.UseShellExecute = false; 
      process.StartInfo.CreateNoWindow = true; 
      process.StartInfo.RedirectStandardOutput = true; 
      process.Start(); 
      return process.StandardOutput.ReadToEnd(); 
     } 
+0

'也许开销太多?'一点都不。特别是当设置反对尝试解析递归变量的兔子踪迹的开销时:'%ComSpec%=%SystemRoot%\ System32 \ cmd.exe'。什么样的恶梦。当我发现你的答案时,我正要放弃。好戏。 – InteXX

相关问题