Windows
PATH 變數和引號(windows)
我在 windows 下的 PATH 變數有一個奇怪的問題:
我的應用程序位於 c:\app\bin 文件夾中,該應用程序的 DLL 位於 c:\app\runtime 文件夾中。為了執行我的程序,我使用 *.bat 文件修改 PATH 變數,通常使用以下腳本:
set PATH="c:\app\bin";"c:\app\runtime";%PATH%
這會將執行檔和 DLL 帶到路徑上。但是,在我的一個 Windows Server 2008 R2 系統上,這不起作用。這意味著,如果我在命令視窗中執行上述命令,我可以從 c:\app\bin 啟動 exe 文件,但應用程序立即抱怨找不到所需的某些 dll 文件(“程序無法啟動,因為….dll 從您的電腦中失去…")。這些 dll 文件應該在 c:\app\runtime 中。
我做了一點實驗,它指出有三種解決方法:
- 使用“系統屬性”對話框永久修改 PATH 變數
- 省略上述命令中DLL文件路徑的引號,例如set
PATH="c:\app\bin";c:\app\runtime;%PATH%
- 將DLL文件複製到exe所在目錄
關於解決方案 2 的奇怪部分是,如果我將引號添加到第一個路徑,或者如果我更改路徑的順序,它不會改變任何內容。
有人知道為什麼我的原始腳本不起作用嗎?我需要讓它執行,因為它是由程序自動創建的,我無法更改生成 bat 文件的應用程序。
該
PATH
變數通常不包含引號;它使用分號作為分隔符。例如,這是我係統的PATH
定義,其中包括帶空格的文件夾:%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files\Microsoft Windows Performance Toolkit\
似乎 Windows 可以執行帶有“引用”路徑的程序,但 DLL 搜尋常式無法處理它們。
理想情況下,您應該使用:
set PATH=c:\app\bin;c:\app\runtime;%PATH%
另一種解決方法可能是從 啟動程序
c:\app\runtime
,例如:cd /d C:\app\runtime ..\bin\app.exe
這甚至可能不需要修改
PATH
變數。