有沒有辦法以編程方式設置全局Windows路徑環境變量(C++)?
據我所知,putenv只爲當前應用程序設置它。
直接在註冊表中更改(HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment)
也是一個選項,但我更喜歡API方法,如果有的話?有沒有辦法在Windows上用C++編程設置環境路徑?
16
A
回答
23
MSDN Says:
調用SetEnvironmentVariable方法對系統環境變量 沒有 效果。 以編程方式添加或 修改系統環境變量, 將它們添加到 HKEY_LOCAL_MACHINE \系統\ CurrentControlSet \控制\會話 經理\環境的註冊表項,然後 廣播WM_SETTINGCHANGE消息 與lParam的設置爲字符串 「環境」 。這允許 應用程序(例如shell)到 接收更新。請注意,此項中列出的環境變量 的 值限制爲1024 個字符。
3
沒有API - 更改註冊表是實現它的方法。更改的值將用於更改後開始的進程。
另請注意,運行的應用程序必須主動處理設置更改的消息,許多(大多數?)不這樣做。
2
如果您想通過註冊表完成,您可能需要查看this程序的源代碼。
微軟還提供了一個名爲setx的小命令行實用程序,其resource toolkits可讓您執行此操作。順便說一下,常規設置命令只是讓你定義我認爲的本地環境變量。
2
是的你是對的。 您還需要在不註銷BORAD鑄造於所有Windows SETTINGCHANGE的參數(LPARAM)「環境」與SMTO_ABORTIFHUNG使用SendMessageTimeout API幾毫秒(5000)
發送消息給這些設置生效。
這是資源工具包提供的setX.exe。
9
正如前面所指出的,在機水平改變路徑只是改變此註冊表項:
HLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
但你還可以通過更改此註冊表設置在用戶級別的PATH項:
HKEY_CURRENT_USER\Environment\Path
而且你還可以通過添加應用程序\路徑DETA設定在應用水平的PATH ils to this registry entries:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\
相關問題
- 1. Java環境路徑設置
- 2. 有沒有辦法在Android平板電腦上編程C#windows應用程序?
- 3. 有沒有辦法在wsl中訪問Windows環境變量?
- 4. 有沒有辦法在Windows Embedded上使用c#2010編寫的程序?
- 5. 有沒有辦法在Windows 7上編譯MS-DOS程序?
- 6. 有沒有辦法在iPhone上以編程方式在iOS上設置UIBackgroundModes?
- 7. 在Openshift中設置環境路徑
- 8. 設置在批處理環境變量的路徑在Windows
- 9. 有沒有辦法在Windows Mobile設備上啓用FIPS模式?
- 10. 如何設置[Windows上的Ubuntu上的Bash] [環境變量]來自[Windows路徑]?
- 11. 有沒有辦法改變應用程序的路徑?
- 12. 如何在當前Puppet會話中設置Windows環境路徑?
- 13. 有沒有辦法改變使用C++的MFC線程的語言環境
- 14. 有沒有辦法用C#編輯pdf?
- 15. 有沒有辦法爲LESS文件設置通用圖像路徑?
- 16. 有沒有辦法在windows下訪問gettext使用的語言環境?
- 17. 有沒有辦法以編程方式啓動Windows「設置麥克風」
- 18. 有沒有辦法找到EXE編譯路徑
- 19. 有沒有辦法通過編程方式在BlackBerry上設置numlock?
- 20. 有沒有辦法以編程方式將ApartmentState設置爲STA?
- 21. Python/Sqlite3 - 有沒有辦法以編程方式設置.nullvalue?
- 22. 有沒有辦法在android上運行windows mobile應用程序?
- 23. 有沒有辦法在linux中編輯windows c + + exe文件
- 24. 有什麼辦法可以在Windows中設置遞歸環境變量?
- 25. 有沒有辦法在Rails路線中禁止路徑?
- 26. 永久設置環境路徑
- 27. systemd:「環境」指令設置路徑
- 28. 有沒有辦法在Windows中使用JavaScript獲取ProgramData的路徑?
- 29. 有沒有辦法在Windows 8上以編程方式設置用戶個人資料圖片?
- 30. 如何使用C設置環境變量路徑#
需要注意的是,「Environment」字符串是UTF16格式,所以你應該使用`L`前綴。示例代碼:`SendMessageTimeout(HWND_BROADCAST,WM_SETTINGCHANGE,0,(LPARAM)L「Environment」,SMTO_ABORTIFHUNG,5000,NULL);` – izogfif 2015-10-23 14:13:02