在机器范围内以编程方式设置环境变量并发送设置更改消息
Set an Environment Variable Programatically in the Machine Scope and send SettingsChange Message
我有一些代码可以在 MACHINE、USER 和 PROCESS 范围内设置环境变量。
用户和进程按预期执行,但出于某种原因,当我尝试验证机器范围变量时,未找到它。
我设置环境变量的代码非常简单:
Environment.SetEnvironmentVariable("foo1", "bar1", EnvironmentVariableTarget.Machine);
Environment.SetEnvironmentVariable("foo2", "bar2", EnvironmentVariableTarget.User);
Environment.SetEnvironmentVariable("foo3", "bar3", EnvironmentVariableTarget.Process);
我是不是漏掉了什么?
更新
我正在尝试使用发送 WM_SETTINGCHANGE
消息时所述的内容来解决问题。我很好奇添加这个是否允许 SetEnvironmentVariable
工作,或者唯一的方法是通过注册表。
我将尝试两种方法,看看哪个有效,到目前为止,我挂断了广播消息。据我所知,这是广播消息所需的语法
IntPtr HWND_BROADCAST = new IntPtr(0xFFFF);
const int WM_SETTINGCHANGE = 0x001A;
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, null, "Environment");
为此,我使用了以下 dll 导入。
[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam, String lParam);
设置机器级环境变量有点棘手。问题是这不会立即影响流程,因为它们已经 运行 在自己的环境中。在那里查看更多信息:https://serverfault.com/questions/8855/how-do-you-add-a-windows-environment-variable-without-rebooting 我不确定 Environment.SetEnvironmentVariable
是否会为您完成。
我有一些代码可以在 MACHINE、USER 和 PROCESS 范围内设置环境变量。
用户和进程按预期执行,但出于某种原因,当我尝试验证机器范围变量时,未找到它。
我设置环境变量的代码非常简单:
Environment.SetEnvironmentVariable("foo1", "bar1", EnvironmentVariableTarget.Machine);
Environment.SetEnvironmentVariable("foo2", "bar2", EnvironmentVariableTarget.User);
Environment.SetEnvironmentVariable("foo3", "bar3", EnvironmentVariableTarget.Process);
我是不是漏掉了什么?
更新
我正在尝试使用发送 WM_SETTINGCHANGE
消息时所述的内容来解决问题。我很好奇添加这个是否允许 SetEnvironmentVariable
工作,或者唯一的方法是通过注册表。
我将尝试两种方法,看看哪个有效,到目前为止,我挂断了广播消息。据我所知,这是广播消息所需的语法
IntPtr HWND_BROADCAST = new IntPtr(0xFFFF);
const int WM_SETTINGCHANGE = 0x001A;
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, null, "Environment");
为此,我使用了以下 dll 导入。
[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam, String lParam);
设置机器级环境变量有点棘手。问题是这不会立即影响流程,因为它们已经 运行 在自己的环境中。在那里查看更多信息:https://serverfault.com/questions/8855/how-do-you-add-a-windows-environment-variable-without-rebooting 我不确定 Environment.SetEnvironmentVariable
是否会为您完成。