我可以让 Windows 上的符号链接 exe 在同一个文件夹中“看到”它的依赖项吗?

我可以让 Windows 上的符号链接 exe 在同一个文件夹中“看到”它的依赖项吗?

比如说,我要wget在 Windows 上使用。如果我解压 zip 文件,它会有很多依赖项(dll 等)。现在,如果我要将符号链接wget.exe(使用mklink)到我的桌面(我尝试过使用符号链接和硬链接),它仍然无法工作,除非将必要的 dll 也放在桌面上/也将其符号链接到桌面。有没有办法让它从桌面运行,但“看到”依赖项回到它自己的文件夹中?

请注意,如果我要wget.exe在桌面上创建快捷方式,我可以轻松地从命令提示符中将其调出,并以桌面为位置,并且它可以按预期工作,但我必须运行wget.exe.lnk。我可以让符号链接像这样运行吗(当然没有.lnk)?

谢谢!

答案1

还有另一种解决方案;使用批处理文件来调用 exe,而不是使用链接(或以及)。

例如,我有一个文件夹c:\utils\path,我将所有想要按程序名称运行的单文件 exe 放入其中,而不管路径如何(即,该文件夹在我的%path%环境变量中;从而避免我必须为每个实用程序添加新目录)。

我有一个应用程序需要来自其本地路径的 DLL(例如make),但我不想将其所有 DLL 复制到我的c:\utils\path目录中,因此它位于其默认安装路径下(C:\Program Files (x86)\GnuWin32\bin\)。

我可以创建一个批处理文件,make.bat其中包含以下内容;然后它充当 exe 的符号链接:

"C:\Program Files (x86)\GnuWin32\bin\make.exe" %*

即批处理调用 exe,提供其完整路径(因此它在其本地目录中找到 DLL),并传递传递%*给批处理文件的任何参数()。

该批处理文件可以直接放在我的路径目录下c:\utils\path;或者可以将其放在与其相关的 exe (C:\Program Files (x86)\GnuWin32\bin\)旁边,并使用来自我的路径目录的符号链接来定位批处理而不是 exe。

附注:遗憾的是,"%~dp0\make.exe" %*批处理脚本中的使用不起作用;因为%~dp0解析的是符号链接的目录,而不是其目标的目录。话虽如此,但这并不是什么问题;因为我们知道 exe 的完整路径,而且它不太可能移动。

答案2

简短回答:不。

需要说明的是,这在以符号链接为常态的 Linux/Unix 中甚至不起作用。在任何命令行环境中,如果二进制文件具有依赖项,则它们必须位于当前工作目录中,或位于 PATH 变量中的某个目录中。

就您而言,您可以将目录硬链接到您的桌面,但在运行 wget.exe 之前,您仍然必须从命令行通过 CD 进入该目录。

唯一的选择是重新编译 wget.exe 并将其静态链接到它所需的 .dll 文件(因为它是开源的)。这样你就不需要那些 .dll 了,而 wget.exe 将成为独立的可执行文件。然而,在 Windows 中执行此操作的步骤有点超出 SuperUser 的范围。

相关内容