为什么在 Windows 上将可执行文件符号链接到 C:\Windows\System32 不是一个常见做法?

为什么在 Windows 上将可执行文件符号链接到 C:\Windows\System32 不是一个常见做法?

在 Linux 上,在安装某些应用程序期间,通常会创建指向其可执行文件的符号链接,以便/usr/bin它们位于系统PATH变量中。

另一方面,在 Windows 上,大多数应用程序会PATH在安装过程中将其自己的安装路径连接到环境变量,这会导致一些不属于该问题范围的问题。

我认为文件夹C:\Windows\System32的作用与有点类似/usr/bin,因为它们都是两个系统中标准变量的一部分PATH,那么为什么将可执行文件符号链接到不是一种常见的做法呢C:\Windows\System32

答案1

因为PATH环境变量比符号链接功能早了二十年。Linux 中看到的符号链接的等效项于 2006 年随 Windows Vista 引入。该PATH变量自 1986 年起就已存在。

要从 20 年前的方法转向新方法,开发人员需要一个非常好的理由这超过了创建符号链接的缺点System32

  • 这样做需要管理权限。
  • 必须为每个 .exe 文件创建一个符号链接。
  • 安装程序和卸载程序必须创建和销毁它们。如果开发人员更改了 .exe 文件的名称,则必须编写例程来检查旧的符号链接并更新它们。
  • 考虑到以上所有情况,如果两个应用程序的 .exe 文件名称相似,那么除了“DLL 地狱”,我们还会遇到“符号链接地狱”。一个地狱还不够吗?
  • 结果始终是针对每台机器的(而不是针对每个用户或每个进程的)。

同时:

  • 无论如何,没有多少应用程序使用该PATH变量。大多数应用程序都是 GUI 应用程序,它们的快捷方式安装到“开始”菜单中,并且是它们的主要执行途径。
  • 变量PATH可以根据每台机器、每个用户甚至每个进程进行自定义。事实上,一些应用程序(如 Visual Studio)已经PATH为该实例定制了带有自定义每个进程变量的命令提示符。

答案2

这个问题很广泛,我不确定它是否会生存下来,但答案很明显,它System32与完全不同/usr/bin。你它们扮演着相似的角色,但这并不意味着事实如此。它们都是系统路径的一部分,这一事实本身并不意味着它们具有相似的角色。

如果有的话,System32更相似/sbin,这也是 Linux 上默认系统路径的一部分。但是,由于这些是非常不同的操作系统,因此这种比较远非完美。

将符号链接放入一般用户安装的程序中是一种常见的做法吗/sbin

相关内容