||3 years ago|
|README.md||3 years ago|
|native_test.go||3 years ago|
|winpath.go||3 years ago|
|winpath_nonwindows.go||3 years ago|
|winpath_test.go||3 years ago|
|winpath_unsafe.go||3 years ago|
|winpath_windows.go||3 years ago|
An example of getting, setting, and broadcasting PATHs on Windows.
This requires the
unsafe package to use a syscall with special message poitners to update
PATH without a reboot.
It will also build without
go build -tags unsafe -o winpath.exe
winpath show %USERPROFILE%\AppData\Local\Microsoft\WindowsApps C:\Users\me\AppData\Local\Programs\Microsoft VS Code\bin %USERPROFILE%\go\bin C:\Users\me\AppData\Roaming\npm C:\Users\me\AppData\Local\Keybase\
winpath append C:\someplace\special Run the following for changes to take affect immediately: PATH %PATH%;C:\someplace\special
winpath prepend C:\someplace\special Run the following for changes to take affect immediately: PATH C:\someplace\special;%PATH%
winpath remove C:\someplace\special
Giving away the secret sauce right here:
This is essentially the snippet you need to have the HKCU and HKLM Environment registry keys propagated without rebooting:
HWND_BROADCAST := uintptr(0xffff) WM_SETTINGCHANGE := uintptr(0x001A) _, _, err := syscall. NewLazyDLL("user32.dll"). NewProc("SendMessageW"). Call(HWND_BROADCAST, WM_SETTINGCHANGE, 0, uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr("ENVIRONMENT"))))
If you check
SHELL and it isn't empty, then you're probably in MINGW or some such.
If that's empty but
COMSPEC isn't, you can be reasonably sure that you're in cmd.exe or Powershell.