在机器范围中以编程方式设置环境变量并发送SettingsChange消息

时间:2015-07-27 18:50:17

标签: c# environment-variables

我有一些代码可以在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);

1 个答案:

答案 0 :(得分:1)

设置机器级环境变量有点棘手。问题是,由于它们已经在自己的环境中运行,因此不会对流程产生直接影响。在那里查看更多内容:https://serverfault.com/questions/8855/how-do-you-add-a-windows-environment-variable-without-rebooting我不确定Environment.SetEnvironmentVariable会为您做到这一点。