症狀回放:
最近安裝一個Delphi的控件,結果,在安裝之后啟動Delphi時出現了找不到相關文件的錯誤。一開始以為是Delphi內的Library路徑沒有添加,查看,一切正常。再次啟動Delphi,提示說將xxx路徑插入到PATH環境變量中失敗,原因是PATH變量超出長度限制。
查找根源:
根據Delphi的提示,打開環境變量設置窗口,發現PATH變量確實不短(安裝了很多開發工具,很多都需要設置環境變量),由於那個控件存在獨立運行環境,需要寫入系統PATH環境變量。但偏偏這個控件的名字又長的要命。先前有同學告訴我,PATH太長可以使用別名來解決,即創建其它名稱的環境變量,並在PATH中使用兩個“%”來引用,於是將一部分PATH路徑拿出來,新建了一個環境變量並在PATH中引用。
再啟動Delphi,咦?另一個文件又找不到了。反復檢查發現,剛剛建立的環境變量已經起作用,但另外的路徑又丟失了。於是打開CMD控制台,輸入PATH,才發現,PATH變量的值已經被截斷,原來那個使用別名的方法只是治標不治本。單條PATH變量可以插入了,變量值的長度限制還是存在。難道,非要我把每個程序都安裝到短文件路徑中?
偏方醫治:
當我無奈中想到重裝程序到短文件路徑時,突然拉亮了另一盞燈。對,DOS8.3格式的短文件名!(哈哈,當時我叫出來的第一句就是,你太有才了…)。所謂DOS8.3格式短文件名就是文件或目錄名分8字節主文件名和一個點加3字節的擴展名,在非DOS時代的系統,雖然文件名可以超出這個限制,但仍然可以使用該規則來操作文件名,即使用我們經常見到的“~n”方式。
那么,既然很多文件夾名稱都那樣的長(比如MS SQLSERVER的Microsoft SQL Server文件夾),那使用DOS8.3格式的短文件名來壓縮路徑,不就可以起到縮短PATH路徑的作用了?
但是,我們又如何獲取一個文件或目錄的短文件名呢?其實系統已經給我們提供了這個工具,很簡單,在CMD控制台中運行 dir /n /x,那么當前目錄下的文件名就以長/短兩種方式顯示出來,接下來就不用我說了吧…
后記:
現在需要PATH環境變量的程序越來越多,PATH的空間也越來越小,真不知道此問題要何時才能解決。剛剛我在Microsoft的網站上找到了一個關於PATH長度限制補丁的說明,但由於整篇指東言西的描述讓人匪夷所思,大概是有一個可以把PATH擴展到2046字節的補丁已經發出來,可是始終沒找到下載地址。本文敘述的方法也僅僅是治標不治本,但在不限制長度PATH環境變量出現之前,其不失為一種這種方法。
