【发布时间】:2015-07-27 18:50:17
【问题描述】:
我有一些代码可以在 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);
【问题讨论】:
-
我想您可能没有足够的权限来修改机器变量?
-
我以管理员身份运行该程序,所以权限不应该是问题。 @RBarryYoung
-
@AlexAtNet 我正在尝试使用该答案来解决问题,但尚未成功。
-
你怎么知道机器变量没有改变?您是否检查过系统属性中的变量或尝试从资源管理器中生成新进程?