我有一些代码可以在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);
答案 0 :(得分:1)
设置机器级环境变量有点棘手。问题是,由于它们已经在自己的环境中运行,因此不会对流程产生直接影响。在那里查看更多内容:https://serverfault.com/questions/8855/how-do-you-add-a-windows-environment-variable-without-rebooting我不确定Environment.SetEnvironmentVariable
会为您做到这一点。