【问题标题】:Set an Environment Variable Programatically in the Machine Scope and send SettingsChange Message在机器范围内以编程方式设置环境变量并发送设置更改消息
【发布时间】: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 我正在尝试使用该答案来解决问题,但尚未成功。
  • 你怎么知道机器变量没有改变?您是否检查过系统属性中的变量或尝试从资源管理器中生成新进程?

标签: c# environment-variables


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-09-14
    • 2012-10-16
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-04
    相关资源
    最近更新 更多