![是否可以使用 %ProgramFiles% 来指导新程序的安装?](https://linux22.com/image/1340075/%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8%20%25ProgramFiles%25%20%E6%9D%A5%E6%8C%87%E5%AF%BC%E6%96%B0%E7%A8%8B%E5%BA%8F%E7%9A%84%E5%AE%89%E8%A3%85%EF%BC%9F%20.png)
这样做的目的是让默认的“程序文件”(32 位和 64 位)文件夹位于任意路径下,可能位于与 Windows 所在的驱动器不同的驱动器上。
最初我认为这可以通过使用系统环境变量通过控制面板 -> 系统 -> 高级 -> 下的对话框环境变量。这些变量原来是在注册表中的以下项下设置的HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion
。然而,有一个条目令人困惑。该ProgramFilesPath
条目似乎指向一个环境变量未在同一个注册表项下定义。
我可以假设ProgramFilesDir
和之间ProgramFilesPath
没有区别,并且其中一个存在向后兼容性,但是拥有一些来自微软的合法资源来查看会比猜测更好。
在收到一些令人担忧的反馈关于在同一个文件夹中同时拥有 32 位和 64 位应用程序,我决定不询问这样做的可行性以避免讨论。
真正的问题是,通过“切入”Windows 安装过程并尽早修改这些注册表项,是否能够达到预期的效果。这些设置应该是系统范围的,而不仅仅是针对特定用户安装的软件。如果确实可以做到这一点,我想知道是否存在任何微妙的陷阱。
期望库和其他资源位于默认位置的程序可能可以使用与 Windows 相同的技术来处理,以重新映射“Documents and Settings”文件夹等(即,破坏遗留应用程序并不是真正的问题)。
答案1
是的,改变变量应该会导致新的程序默认到新文件夹,但它也会导致 Windows(以及任何正确编码的使用该变量的程序)在新文件夹中查找程序。因此,它将破坏已安装的软件,至少一些程度。
根据软件的不同,在安装过程中,它们的路径可能被硬编码,也可能没有。如果它们不是硬编码的并且使用变量,那么程序将不再被找到。如果它们是硬编码的,那么它们将(或至少应该)继续运行,但其他副作用可能会/将会出现,例如 Windows 和其他对已安装程序执行操作的程序(如清理临时文件、扫描更新等)可能会或可能不会看到它们,具体取决于它们的编码方式。
重点是,最好在安装 Windows 之前或期间(或最多在之后立即)更改变量。稍后再这样做,特别是在已经安装了程序(尤其是像大多数 Microsoft 程序一样深入系统的大型程序)之后,不是一个好主意,而且充满风险。
(实际上,虽然使用变量的意义在于使更改变得更容易,但事实是,无论何时更改路径总是有风险的Program Files
,Windows
因为某些程序(包括 Windows)不可避免地会有一段代码期望事物位于特定位置,因此如果您更改它,就会被破坏。)