Windows

PATH 變數和引號(windows)

  • August 30, 2019

我在 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 中。

我做了一點實驗,它指出有三種解決方法:

  1. 使用“系統屬性”對話框永久修改 PATH 變數
  2. 省略上述命令中DLL文件路徑的引號,例如setPATH="c:\app\bin";c:\app\runtime;%PATH%
  3. 將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變數。

引用自:https://serverfault.com/questions/349179