using System;
using System.Text;
using System.Collections;
using System.Management;
using System.Runtime.InteropServices;
using Microsoft.Win32;
namespace EnvironmentVariables
{
/// <summary>
/// Class1 の概要の説明です。
/// </summary>
class Class1
{
/// <summary>
/// アプリケーションのメイン エントリ ポイントです。
/// </summary>
[STAThread]
static void Main(string[] args)
{
try
{
// System.Environment を使って、1つの環境変数を得る。
SystemEnvironment();
// Platform SDK を使う方法
PlatformSDKSet();
PlatformSDKGet();
// WMI を使う方法
WMIPrintEnv("Path");
WMIEnumEnv();
WMISetEnv("TestWMI", "WMI", false);
WMIPrintEnv("TestWMI");
// レジストリを使う方法
RegSetEnv("TestReg", "Hello World System", true);
RegSetEnv("TestReg", "Hello World User", false);
RegPrintEnv(true);
RegPrintEnv(false);
}
catch (Exception exc)
{
Console.WriteLine("失敗しました。" + exc.Message);
}
}
// ------------------------ System.Environment ------------------------------
static void SystemEnvironment()
{
// System.Environment を使って、1つの環境変数を得る。
string usrName = System.Environment.GetEnvironmentVariable("USERNAME");
Console.WriteLine("USERNAME = " + usrName);
Console.WriteLine("--------------------------");
// System.Environment を使って、すべての環境変数を得る。
IDictionary idict = System.Environment.GetEnvironmentVariables();
IDictionaryEnumerator denum = idict.GetEnumerator();
while( denum.MoveNext() )
{
Console.WriteLine("{0} = {1}", denum.Key, denum.Value);
}
Console.ReadLine();
}
// ------------------------ PlatformSDK ------------------------------
//BOOL SetEnvironmentVariable(
// LPCTSTR lpName, // 環境変数の名前
// LPCTSTR lpValue // 環境変数の新しい値
// );
[DllImport("Kernel32.dll")]
static extern bool SetEnvironmentVariable(string name, string val);
static void PlatformSDKSet()
{
bool result = SetEnvironmentVariable("TestPlatformSDK", "Hello World");
Console.WriteLine("SetEnvironmentVariable result = {0}", result.ToString());
Console.ReadLine();
}
// DWORD GetEnvironmentVariable(
// LPCTSTR lpName, // 環境変数の名前
// LPTSTR lpBuffer, // 変数の値が格納されるバッファ
// DWORD nSize // バッファのサイズ
// );
[DllImport("Kernel32.dll")]
static extern uint GetEnvironmentVariable(string name, StringBuilder sb, uint sbLen);
static void PlatformSDKGet()
{
string query = "TestPlatformSDK";
StringBuilder sb = new StringBuilder(256);
uint result = GetEnvironmentVariable(query, sb, (uint)sb.Capacity);
Console.WriteLine("GetEnvironmentVariable result = {0}: {1} = {2}",
result.ToString(), query, sb.ToString());
Console.ReadLine();
}
// ------------------------ WMI ------------------------------
static void WMIPrintEnv(string name)
{
ManagementObjectSearcher query1 =
new ManagementObjectSearcher("SELECT * FROM Win32_Environment WHERE NAME = '" + name +"'") ;
ManagementObjectCollection queryCollection1 = query1.Get();
foreach( ManagementObject mo in queryCollection1 )
{
Console.WriteLine("--------------------------");
Console.WriteLine("Name:" + mo["Name"]);
Console.WriteLine("VariableValue:" + mo["VariableValue"]);
Console.WriteLine("Caption:" + mo["Caption"]);
Console.WriteLine("Description:" + mo["Description"]);
Console.WriteLine("InstallDate:" + mo["InstallDate"]);
Console.WriteLine("Status:" + mo["Status"].ToString());
Console.WriteLine("SystemVariable:" + mo["SystemVariable"]);
Console.WriteLine("UserName:" + mo["UserName"]);
}
Console.ReadLine();
}
static void WMIEnumEnv()
{
ManagementObjectSearcher query1 =
new ManagementObjectSearcher("SELECT * FROM Win32_Environment") ;
ManagementObjectCollection queryCollection1 = query1.Get();
foreach( ManagementObject mo in queryCollection1 )
{
Console.WriteLine("--------------------------");
Console.WriteLine("Name:" + mo["Name"]);
Console.WriteLine("VariableValue:" + mo["VariableValue"]);
Console.WriteLine("Caption:" + mo["Caption"]);
Console.WriteLine("Description:" + mo["Description"]);
Console.WriteLine("InstallDate:" + mo["InstallDate"]);
Console.WriteLine("Status:" + mo["Status"].ToString());
Console.WriteLine("SystemVariable:" + mo["SystemVariable"]);
Console.WriteLine("UserName:" + mo["UserName"]);
}
Console.ReadLine();
}
static void WMISetEnv(string name, string val, bool systemVariable)
{
// TMP 環境変数の名前と値を変えて、別の環境変数として Put() する。
// このため、美しくないけど、TMP 環境変数があることを前提としています。
// 間違って、TMP を書き換えないように注意!
Console.WriteLine("----------- Set Environment Variable -------------");
ManagementObjectSearcher query1 =
new ManagementObjectSearcher("SELECT * FROM Win32_Environment WHERE NAME = 'TMP'") ;
ManagementObjectCollection queryCollection1 = query1.Get();
foreach( ManagementObject mo in queryCollection1 )
{
mo["Name"] = name;
mo["VariableValue"] = val;
// UserName は "<SYSTEM>"か"<DEFAULT>"
// マニュアルには書いていないけど、
// それ以外に"HOST\USER"か"DOMAIN\USER"
mo["UserName"] = @"UCHUKAMEN\Uchukamen";
mo["SystemVariable"] = systemVariable;
mo.Put();
Console.WriteLine("----------- Done -------------");
break;
}
Console.ReadLine();
}
static void RegPrintEnv(bool systemVariable)
{
Console.WriteLine("------------ RegPrintEnv --------------");
string [] names = null;
RegistryKey regKey = null;
if (systemVariable)
{
regKey = Registry.LocalMachine.OpenSubKey(@"System\CurrentControlSet\Control\Session Manager\Environment");
names = regKey.GetValueNames();
}
else
{
regKey = Registry.CurrentUser.OpenSubKey("Environment");
names = regKey.GetValueNames();
}
foreach(string name in names)
{
Console.WriteLine(name + " : " + regKey.GetValue(name));
}
Console.ReadLine();
}
static void RegSetEnv(string name, string val, bool systemVariable)
{
Console.WriteLine("------------ RegSetEnv --------------");
RegistryKey regKey = null;
if (systemVariable)
{
regKey = Registry.LocalMachine.CreateSubKey(@"System\CurrentControlSet\Control\Session Manager\Environment");
}
else
{
regKey = Registry.CurrentUser.CreateSubKey("Environment");
}
regKey.SetValue(name, val);
Console.ReadLine();
}
}
}
|