解决方案: Marco 的回答很好,从技术上回答了我的问题 - 除了我发现环境变量 SYSTEMROOT 和 SYSTEMDRIVE 并没有真正在设置了所有环境变量的注册表中设置,因此,选择的答案适用于除这两个变量之外的所有变量,我在 OP 中指定。
SYSTEMROOT 在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRoot 的注册表中定义,显然(经过更多研究),SYSTEMDRIVE 是作为 SYSTEMDRIVE 的子字符串生成的。
因此,要从注册表中获取 SYSTEMDRIVE 和 SYSTEMROOT 并将它们加载到环境中:
using Microsoft.Win32;
namespace MySpace
{
public class Setup
{
public Setup()
{
SetUpEnvironment();
}
private void SetUpEnvironment()
{
string test_a = Environment.GetEnvironmentVariable("SYSTEMDRIVE", EnvironmentVariableTarget.Process);
string test_b = Environment.GetEnvironmentVariable("SYSTEMROOT", EnvironmentVariableTarget.Process);
if (test_a == null || test_a.Length == 0 || test_b == null || test_b.Length == 0)
{
string RegistryPath = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion";
string SYSTEMROOT = (string) Registry.GetValue(RegistryPath, "SystemRoot", null);
if (SYSTEMROOT == null)
{
throw new System.ApplicationException("Cannot access registry key " + RegistryPath);
}
string SYSTEMDRIVE = SYSTEMROOT.Substring(0, SYSTEMROOT.IndexOf(':') + 1);
Environment.SetEnvironmentVariable("SYSTEMROOT", SYSTEMROOT, EnvironmentVariableTarget.Process);
Environment.SetEnvironmentVariable("SYSTEMDRIVE", SYSTEMDRIVE, EnvironmentVariableTarget.Process);
}
}
}
}
然后你可以Setup setup = new Setup();
从其他班级打电话。就是这样。:-)