我有一些代码可以在 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
是否会为您完成。
关于c# - 在机器范围内以编程方式设置环境变量并发送设置更改消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31660978/