В моем приложении на C # я программно устанавливаю клиент Oracle, если он отсутствует, что требует добавления dir в системную переменную среды 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 требует логина, чтобы распознать изменения, я не уверен. Заранее спасибо.