XP-7 双启动时出现奇怪的快捷方式图标问题

XP-7 双启动时出现奇怪的快捷方式图标问题

我双启动 Windows XP 和 Windows 7,遇到了快捷方式图标的特殊问题。

每个操作系统使用不同的桌面,因此我在每个操作系统上都设置了另一个桌面的快捷方式,以便从任一版本的 Windows 轻松访问这两个桌面;也就是说,在 XP 中,桌面包含一个名为 的快捷方式,7Desk而在 7 中,桌面包含一个名为 的快捷方式XPDesk。此外,7Desk.lnk设置为使用shell32.dllWindows 7 中的桌面图标资源,XPDesk.lnk设置为使用 Windows XP 中的桌面图标资源shell32.dll。这样,每个快捷方式都会显示另一个操作系统的桌面图标。

问题是,尽管更改图标对话框中我可以看到正确的图标(对于其他操作系统),当我单击“确定”时,图标将显示与当前启动的操作系统而不是另一个。我已确认其他图标资源(如回收站图标)也会出现这种情况。

这令人困惑,因为就 Windows(以及更改图标对话框)而言,shell32.dll来自另一个驱动器的 DLL 只是一个包含图标的文件。它没有理由对 DLL 进行特殊处理,更神秘的是它如何知道它的哪个自己的图标来代替它。也就是说,XP 如何知道使用 XP 桌面图标代替 7 桌面图标,或者 7 如何知道使用 7 回收站图标代替 XP 回收站图标?更令人困惑的是,我在十六进制编辑器中检查了 LNK 文件,可以清楚地看到图标资源确实指向另一个驱动器上的文件,不是简单地说\windows\system32\shell32.dll

(当然,图标索引是相同的,所以也许它只是使用自己的副本,shell32.dll而不是在不同驱动器上指定的副本,但是,为什么会这样?这是某种“人工智能”吗?更改对话框功能,试图做它认为我们想要做的事而不是我们说的事?)

如果问题不清楚,我可以录制屏幕录像。

答案1

Windows 可能会使用 LoadLibrary 来加载带有图标的 DLL。当 LoadLibrary 发现某个 DLL 已加载时,它将使用已加载的 DLL;检查基于 DLL 名称,而不是位置。

如果是这样,一种解决方法是创建具有不同名称的两个 shell32.dll 库的副本(例如,shell32-xp.dll 和 shell32-7.dll),然后更改图标以引用这些文件。

答案2

为了避免复制部分,您可以对它们进行硬链接,每个文件都放在各自的驱动器上。至少我就是这么做的。这样就不用再为每个文件制作多个副本而烦恼了。

fsutil hardlink create \WINDOWS\system32\shell32_xp.dll \WINDOWS\system32\shell32.dll

这是 XP 端的。在 Windows 7 端,请将 _xp 部分替换为 _7 :)

编辑:我发现 Windows 7 上的那个不起作用。除非你破坏权限(有可能破坏系统中的所有内容),否则你只能在 XP 上执行此操作。

如果您仍然想这样做,您必须取得文件的所有权并更改权限,但再次警告!

相关内容