解決策:マルコの答えは素晴らしく、技術的に私の質問に答えました-ただし、環境変数SYSTEMROOTとSYSTEMDRIVEは、すべての環境変数が設定されているレジストリに実際には設定されていないことがわかったため、選択した答えはこれら2つを除くすべての変数に対して機能します、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();
その後、他のクラスから呼び出すことができます。以上です。:-)