C#/.NET 应用程序无法识别环境变量更改 (PATH)

标签 c# variables path environment

在我的 C# 应用程序中,如果 Oracle 客户端不存在,我将以编程方式安装它,这需要将目录添加到 PATH 系统环境变量。这一切工作正常,但直到用户注销/登录到 Windows 或重新启动后才会生效。如果不执行此步骤,如何让我的应用程序识别和使用新的 PATH 变量?即使重新启动我的应用程序也比要求用户注销/登录更好。

据推测,将此更改广播到其他进程应该可行。这是我尝试过的,但没有成功:

    using System.Runtime.InteropServices;

    private const int HWND_BROADCAST = 0xffff;
    private const int WM_WININICHANGE = 0x001a, WM_SETTINGCHANGE = WM_WININICHANGE, INI_INTL = 1;
    [DllImport("user32.dll")]
    private static extern int SendMessageTimeoutA(int hWnd, uint wMsg, uint wParam, string lParam, int fuFlags, int uTimeout, int lpdwResult);

    int rtnVal = 0;
    SendMessageTimeoutA(HWND_BROADCAST, WM_SETTINGCHANGE, 0, "Environment", 2, 5000, rtnVal);

有人告诉我,如果您停止并重新启动有问题的进程,它应该会接受这些类型的更改,但重新启动我的应用程序不会这样做。我想这可能是 Oracle 的问题,关于 Oracle 的某些内容需要登录才能识别更改,我不确定。提前致谢。

最佳答案

是否Environment.GetEnvironmentVariable("MYVAR", EnvironmentVariableTarget.Machine)不工作?

如果我的应用正在提升运行,那么我可以

 Environment.SetEnvironmentVariable("MYVAR", "cool", EnvironmentVariableTarget.Machine);

//do some other stuff...

Console.WriteLine(Environment.GetEnvironmentVariable("MYVAR", EnvironmentVariableTarget.Machine));

C:\TestApp>>TestApp.exe
cool

我不知道这是否适用于其他正在运行的进程,但它应该适用于您的应用程序进行获取/设置

关于C#/.NET 应用程序无法识别环境变量更改 (PATH),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1745361/

相关文章:

c# - 程序员真的应该关心在 .NET 中创建对象的数量和/或频率吗?

c# - Visual Studio 中的 MSBuild - 在将文件包含为内容之前移动文件 (C#)

javascript - 在 JavaScript 中通过引用传递变量

javascript - 使用 javascript 动态创建 SVG 路径,然后导出为 .pdf

bash - bash 可以在完成命令时省略备份文件吗?

python - 获取目录中文件的信息并在表格中打印

c# - 如何检测到MTP设备并开始复制文件?

c# - 使用 SKYPE4COMLib 登录 Skype

javascript - Jquery - 为什么我无法在 $.ajax 中访问/设置我的 var

ios - 模棱两可的 "use of unresolved identifier"错误?