c# - 在机器范围内以编程方式设置环境变量并发送设置更改消息

标签 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);

最佳答案

设置机器级环境变量有点棘手。问题是这不会立即影响进程,因为它们已经在自己的环境中运行。在那里查看更多信息: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/

相关文章:

shell - libssl.so.10 : cannot open shared object file: No such file or directory

c# - System32 或 SysWOW64 的 Windows 7 环境变量

java - intellij 是否以不同的用户身份运行 maven?

c# - 用两个字分开

c# - 检测到不适用于集成托管管道模式的 ASP.NET 设置

c# - 使用 Google .NET API 复制 Google Docs 电子表格

bash - 如何检查是否在cmake中设置了环境变量

javascript - NestJs 在 npm start 上加载环境变量

c# - Entity Framework 4.0 如何确定实体的工厂方法需要哪些参数?

c# - 如何检查当前日是该月最后一个工作日的第 N 天还是距该月最后一个工作日的第 N 天?