簡體   English   中英

有沒有辦法在Windows上以C ++編程方式設置環境路徑?

[英]Is there a way to set the environment path programmatically in C++ on Windows?

有沒有辦法以編程方式設置全局Windows路徑環境變量(C ++)?

據我所知,putenv僅為當前應用程序設置它。
直接在注冊表中更改(HKLM\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment)也是一個選項雖然我更喜歡API方法,如果有的話?

MSDN

調用SetEnvironmentVariable對系統環境變量沒有影響。 若要以編程方式添加或修改系統環境變量,將它們添加到HKEY_LOCAL_MACHINE \\ System \\ CurrentControlSet \\ Control \\ Session Manager \\ Environment注冊表項,然后廣播WM_SETTINGCHANGE消息,並將lParam設置為字符串“Environment”。 這允許應用程序(如shell)獲取更新。 請注意,此鍵中列出的環境變量的值限制為1024個字符。

如前所述,要更改機器級別的PATH,只需更改此注冊表項:

HLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

但您也可以通過更改此注冊表項在用戶級別設置PATH:

HKEY_CURRENT_USER\Environment\Path

您還可以通過將application \\ Path詳細信息添加到此注冊表項來在應用程序級別設置PATH:

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\

沒有API - 改變注冊表就是這樣做的。 更改后的值將用於更改后開始的進程。

另外:請注意,正在運行的應用程序必須主動處理設置已更改的消息,並且許多(大多數?)不這樣做。

如果要通過注冊表執行此操作,可能需要查看程序的源代碼。

Microsoft還提供了一個名為setx的小命令行實用程序及其資源工具包 ,可以讓您執行此操作。 順便說一下,常規set命令只允許你定義我認為的局部環境變量。

是的,你是對的。 您還需要在不注銷的情況下實現這些設置

使用SendMessageTimeout API將borad強制轉換消息發送到所有窗口SETTINGCHANGE,參數(LPARAM)“環境”使用SMTO_ABORTIFHUNG一段時間(5000)。

這是setX.exe隨資源Kit提供的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM