如何從VB6代碼中爲永久用戶環境變量設置一個將在非管理員權限下運行的應用程序?如何設置永久用戶環境變量?
我知道SetEnvironmentValue
但顯然這隻會改變當前過程的變化,這不足以滿足我的需求。
因爲環境變量可能存儲在HKLM註冊表中,所以我擔心運行我的應用程序的非管理員用戶將無法設置env var。
如何從VB6代碼中爲永久用戶環境變量設置一個將在非管理員權限下運行的應用程序?如何設置永久用戶環境變量?
我知道SetEnvironmentValue
但顯然這隻會改變當前過程的變化,這不足以滿足我的需求。
因爲環境變量可能存儲在HKLM註冊表中,所以我擔心運行我的應用程序的非管理員用戶將無法設置env var。
VB6大師卡爾彼得森編寫了一個可重用模塊來處理設置用戶或系統環境變量。請參閱2009年的Visual Studio雜誌的here。Direct link to code
我寫了很久以前的這個方便的課,以完成您所問的內容。
我發現即使在使用SendMessageTimeout函數後,我的應用程序也必須重新啓動,以便對應用程序可以看到用戶env var的更改。那是預期的行爲? – CJ7 2012-02-28 01:25:52
@CraigJ不是真的,它應該在理論上工作。您的應用是否與執行廣播的應用使用相同的用戶?另外,我十多年前就寫了這個代碼。 – AngryHacker 2012-02-28 18:10:00
如果沒有管理員權限,則無法設置系統範圍的變量。如果可以的話,對於惡意應用程序來說,顛覆(說)系統PATH變量並強制它自己的惡意DLL被加載而不是標準系統DLL變得微不足道。您最多可以爲當前用戶設置變量。 – 2012-02-23 02:43:08
@MarcB:我正在談論用戶環境變量,而不是系統環境變量。是否有一種方法將它們設置在當前過程的範圍之外? – CJ7 2012-02-23 02:44:17