【发布时间】:2026-01-10 13:20:08
【问题描述】:
在我的 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 的某些事情需要登录才能识别更改,我不确定。提前致谢。
【问题讨论】:
-
重新启动您的应用程序应该足以获取新的 PATH 变量。您是如何启动安装程序的?
-
这是一个 ClickOnce 部署,也许这就是问题所在?我正在从安装时放入“开始”菜单的快捷方式启动。
标签: c# variables path environment