Windows環境變數程式設計設定

2021-09-30 02:31:53 字數 2935 閱讀 4369

windows

環境變數程式設計設定

本文由淺入深的講解環境變數的定義、使用。對win98、winme

、nt、xp、win2003的不同系統下的應用進行了全面的分析。並以程式設計方式實現設定windows環境變數。這對於一般程式編制和軟體安裝程式編制都有重要的意義。 一

什麼是使用者

環境變數、什麼是系統環境變數:

環境變數的定義(參考msdn

):環境變數是乙個string組成的array。它是計算機的一系列設定(setting),環境變數用以指定檔案的搜尋路徑、臨時檔案目錄、特定應用程式(

)的選項和其他類似資訊。預設情況下,每個程序(process)的環境變數拷貝自父程序。當然父程序也能夠為子程序指定不同的環境變數。

環境變數控制著多種程式的行為。例如,temp 環境變數指定程式放置臨時檔案的位置。任何使用者都可以新增、修改或刪除使用者的環境變數。但是,只有管理員才能新增、修改或刪除系統環境變數。使用「控制面板」中的「系統」可以自定義下列變數:(1)用於 登陸使用者名稱(logged_on_user_name

) 的使用者環境變數;對於特定計算機的每個使用者來說,使用者環境變數是不同的。變數包括由使用者設定的任何內容,以及由應用程式定義的所有變數,例如應用程式檔案的路徑。(2)系統環境變數 ;管理員可以更改或新增應用到系統(從而應用到系統中的所有使用者)的環境變數。安裝期間,windows安裝程式配置預設的系統變數,例如windows 檔案的路徑。

二 使用者環境變數的作用、系統環境的作用:

舉例往往是說明乙個問題的最好辦法,在win2000下,我們觀察「path」這個環境變數,

path=

%systemroot%/system32

。但是 「systemroot

」又是乙個環境變數,

systemroot

=d:/winnt,

所以環境變數「tmp」的最終表徵的路徑為「d:/winnt/system32」

.如我們手動編輯系統環境變數path。修改後path=%systemroot%/system32;c:/

program files

。然後設計乙個**,實現瀏覽器開啟目錄「c:/program files」。這僅涉及乙個簡單的

shellexecute

api:

shellexecute

(null, "explore", "internet explorer",null, "c://program files", sw_shownormal);

等價於

shellexecute

(null,"explore","internet explorer",null,"%path%",

sw_shownormal);

但是後者有很大的靈活性,不修改**只修改環境變數

path

的就能完成新的功能。這對於軟體安裝程式有著很好的意義。熟練的應用環境變數,有助於寫出靈活、模組化的軟體。

以上雖然以

win2000

為例講解,但同樣適用於其他

windows

系統,只是

win98

系列設定環境變數的方式不同,詳情見下節:

設定環境變數的演算法。

三 設定環境變數的演算法:

對於對win98、winme

、nt、xp、win2003一攬子作業系統,可以分為兩類:win98系列,nt系列。它們設定系統環境變數有著本質的不同。但對於設定當前程序的環境變數是一樣的。

a 關於系統環境變數

1)win98系列設定系統環境變數的演算法:

熟悉win98的都清楚,在c盤一般都有乙個「autoexec.bat

」檔案,系統啟動都要執行它,所以這裡是設定系統環境變數的地方,新增乙個環境變數只是新增一行

set path=c:/folder1/folder2

類似的語句。如果新增乙個路徑,那麼就是類似的語句

set path=c:/folder1/folder2;d:/folder3

。系統要重新啟動更改才能有效。

2)nt系列的設定系統環境變數的演算法:

首先分析手動編輯環境變數的原理,通過閱讀msdn文件,發現系統其實在登錄檔

hkey_local_machine/system/currentcontrolset/control/session manager/environment

儲存系統環境變數,當手動修改完畢時,選擇「確定」按鈕退出,向系統所有上級視窗傳送

wm_settingchange

訊息。系統不需要重新啟動。

[插曲]:如何向系統所有上級視窗傳送

wm_settingchange

訊息?我仔細**

msdn

**也沒有給出乙個例子。只能自己想辦法,我編寫了乙個程式專門接受傳送給它的

wm_settingchange

的訊息,**如下:

onsettingchange

(uint uflags, lpctstr lpszsection)

然後手動修改系統環境變數,這是程式接收到訊息,分析

uflags

, lpszsection

兩個引數,得知

uflags

=0, lpszsection=」environment」;

然後模仿該訊息,

向系統所有上級視窗傳送

wm_settingchange

訊息。

b 關於當前的程序的環境變數

這個範圍的環境變數很簡單,程序執行時該變數有效,退出時就失效。所涉及的

api就限於

getenvironmentvariable

、setenvironmentvariable

、getenvironmentstrings

、setenvironmentstrings等。

四 設定環境變數的程式設計實現:

郵件:[email protected]

Windows設定了環境變數,環境變數依然報錯

每一項新技能的學習,都伴隨著設定環境變數。我們實際工作中,理應對環境變數設定十分熟練了,然而今天仍然遇到了乙個新的問題。以上這條報錯資訊,相信大家都遇到過。但是,如果在環境變數設定完成,檢查不出問題的時候,出現這條提示資訊呢?現象描述 1.環境變數設定完成,仔細對著路徑檢查多次,仍未發現問題 2.編...

windows下設定PHP環境變數

安裝php 擴充套件 mysql gd sockets 我的是已安裝好的wamp 在php目錄下的 開啟php.ini 去掉下面注釋 前面的分號 on windows extension dir ext 新增環境變數 win7為 右擊計算機 屬性 高階系統設定 環境變數 系統變數 雙擊 xp下,右擊...

windows下設定PHP環境變數

安裝php 擴充套件 mysql gd sockets 我的是已安裝好的wamp 在php目錄下的 開啟php.ini 去掉下面注釋 前面的分號 php view plain copy print?on windows extension dir ext 新增環境變數 win7為 右擊計算機 屬性 ...