Share via


Windows 機密:隱秘的變數

將一個環境變數內嵌在另一個環境變數內,全靠適當的操作時機。

Raymond Chen

有一個深深隱藏在控制台,稱為環境變數的對話方塊。 要找到它,您需要導航到系統屬性控制台。 然後站在一隻腳上,轉到高級選項卡,並背誦字母表落後的同時按一下環境變數按鈕。

好吧,也許這些步驟的幾個不實際必要。 什麼是清楚的不過,是它不供普通使用者能夠很容易地找到環境變數對話方塊中,更不明白什麼。

當系統生成一個新使用者的環境時,它進行協商建立對話方塊中的設置,以確定哪些變數放到環境和具有什麼值。 總的原則是如果在使用者和系統部分中設置環境變數,則它將遵循使用者定義。

不要完全忽略系統變數,不過,該系統可以使用它來説明定義使用者變數。 人們常常想要基於的系統內容變數的使用者環境變數。 例如,他們可能想要包括的系統路徑,再加上一些附加的目錄的使用者路徑。

這裡是環境建設過程如何工作。 它的收益大致分四個步驟:

  • 第一,系統會創建一些預定義的全機的環境變數如系統­根和所有­使用者­設定檔 (但不是電腦­名稱或程式­的檔)。
  • 第二,它從環境變數對話方塊中的系統部分創建環境變數。 系統內容變數定義可以使用"%"符號指在上一步中創建的預定義的環境變數。 例如,您可以設置系統內容變數 %系統­Drive%\Extras。 完成系統內容後,Windows 啟動建設的使用者環境。
  • 第三步是要創建預定義的每個使用者的環境變數,例如使用者­設定檔和應用程式­的資料。 電腦­名稱和程式­也即使他們在技術上是系統變數和每使用者變數不在這裡,創建相關檔變數。
  • 最後,系統將創建的環境變數。 這些都是在環境變數對話方塊中的使用者部分中,創建由前三個步驟,因此您可以將一個使用者的環境變數設置為 %使用者的任何變數訪問­PROFILE%\Extras 或一個自訂的系統內容變數中的第二步的設置。 如果一個使用者的環境變數具有相同的系統內容變數的名稱,新值將替換舊。

更換發生後,系統會計算新的值,所以你可以像有使用者路徑環境定義為 %PATH%;C:\Extras。 %PATH%變數是指變數的系統版本。 現在,你看到什麼工作,你能弄明白什麼不能正常工作。 它是不作為工作一前一節中描述的東西。

例如,您可以任意位置使用 %systemroot%。 您可以使用任何系統內容變數來説明定義使用者環境變數。 您可以使用一個預定義的每個使用者的環境變數來説明定義使用者環境變數。 但是,您不能使用每個使用者的環境變數來説明定義一個系統內容變數。 時間不會落後。

一位客戶也遇到了困難將系統 PATH 環境變數設置為 %APPDATA%;C:\Windows。 他們發現最後環境只是所載的文本路徑作為指定 (百分號和所有),而不是將它替換的 ntlm 驗證環境價值。 如果你看通過以前的詳細的操作序列,它是明確為什麼發生這種情況。 他們試圖將基於一個尚未定義的變數的系統內容變數設置。

解決辦法很簡單:移動編輯從系統內容清單方塊到使用者環境清單方塊中的路徑。 這樣,當它想要使用 %%環境 ntlm,驗證該變數將存在。

生成使用者環境的代碼可能有嘗試建造花式依賴關係圖。 然後它可以添加自訂的語法允許變數的定義來聲明是否出現的 %PATH%的具體位置打算到 PATH 變數的系統或使用者版本,請參閱。 然後它可能已收集所有這些資訊,生成依賴關係圖,並仔細定義命令中的變數,這樣,每個變數被定義之前其從屬。 然後您將必須決定該怎麼做如果檢測到循環參考。

環境的目標並不是模仿了試算表重新計算引擎。 它只是想從一些基本的資訊,創建環境塊和選擇簡單的規則使整個過程易於解釋和理解。 這是很難理解嗎?

Raymond Chen

Raymond ChenWeb 網站,舊的新事物,並具有相同標題為本書 (艾迪生-衛斯理,2007年) 處理 Windows 歷史和 Win32 程式設計。 在指定地區之外,他不會不喂動物。

相關的內容