PATH 变量和引号(windows)

Hei*_*ich 5 windows windows-server-2008 environment-variables path

我在 windows 下的 PATH 变量有一个奇怪的问题:

我的应用程序位于文件夹 c:\app\bin 中,此应用程序的 DLL 位于 c:\app\runtime 文件夹中。要运行我的程序,我通常使用以下脚本修改带有 *.bat 文件的 PATH 变量:

set PATH="c:\app\bin";"c:\app\runtime";%PATH%
Run Code Online (Sandbox Code Playgroud)

这会将可执行文件和 DLL 带到路径上。但是,在我的其中一个 Windows Server 2008 R2 系统上,这不起作用。这意味着,如果我在命令窗口中执行上述命令,我可以从 c:\app\bin 启动 exe 文件,但应用程序立即抱怨它找不到所需的某些 dll 文件(“程序无法启动,因为....dll 从您的计算机中丢失 ...")。这些 dll 文件应该在 c:\app\runtime 中。

我进行了一些实验,它指出有三种解决方法:

  1. 使用系统属性对话框永久修改 PATH 变量
  2. 省略上面命令中DLL文件路径的引号,例如set PATH="c:\app\bin";c:\app\runtime;%PATH%
  3. 将DLL文件复制到exe所在目录

关于解决方案 2 的奇怪部分是,如果我向第一个路径添加引号,或者如果我更改路径的顺序,它不会改变任何内容。

有人知道为什么我的原始脚本不起作用吗?我需要让它运行,因为它是由程序自动创建的,我无法更改生成 bat 文件的应用程序。

fis*_*ion 8

PATH变量通常并不包含引号; 它使用分号作为分隔符。例如,这是我系统的PATH定义,其中包括带有空格的文件夹:

%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files\Microsoft Windows Performance Toolkit\
Run Code Online (Sandbox Code Playgroud)

似乎 Windows 可以执行带有“引用”路径的程序,但 DLL 搜索例程无法处理它们。

理想情况下,您应该使用:

set PATH=c:\app\bin;c:\app\runtime;%PATH%
Run Code Online (Sandbox Code Playgroud)

另一种解决方法可能是从 启动程序c:\app\runtime,例如:

cd /d C:\app\runtime
..\bin\app.exe
Run Code Online (Sandbox Code Playgroud)

这甚至可能不需要修改PATH变量。