(其中大部分重复了上面已经写过的内容。)
我需要在 Win7 64 位下以管理员身份运行 VS2003,以支持遗留项目(例如在原始 Xbox 上运行的项目)。旧的 XDK 需要 VS2003,所以升级不是一个选项。我可以运行 WinXP,但我更喜欢 Win7。
VS2003 在 Win7 下不受官方支持,尝试这样做会产生一些相当烦人的问题:
Find-in-files 会导致 VS2003 挂起。由于 PDB 文件句柄泄漏,链接失败。Find-in-files 挂起通过使用“禁用视觉主题”来解决。导航到 VS2003 快捷方式(开始-->Microsoft Visual Studio .NET 2003),右键单击以获取上下文菜单,选择兼容性选项卡,设置窗格,然后选中“禁用视觉主题”。
当您通过调试器运行程序、停止它、修改文件并构建时,会发生链接器故障 (LNK1201)。错误是 Visual Studio 持有 PDB 文件的句柄,而链接器尝试写入该文件。您可以停止并重新启动 VS2003 以绕过该问题。工作,但很烦人。
您还可以使用 Microsoft SysInternals“handle.exe”实用程序查找,然后关闭特定文件上某个进程所持有的句柄。编写一个脚本来调用handle.exe 并设置VS2003 项目以将该脚本作为预构建事件运行。(请参阅此线程。)但是 handle.exe 需要以管理员身份运行。
您可以假设将handle.exe 更改为使用通常的步骤(例如作为兼容性设置)以管理员身份运行,但随后handle.exe(显然)在嵌套shell 中运行,然后stdout 文本不会到达调用脚本。
您可以让 VS2003 以管理员身份运行,在这种情况下,Pre-Build 脚本也以管理员身份运行,因此 handle.exe 也是如此,并且有效。
剩下的技巧是让 VS2003 SLN 文件正确打开。如果您只是让 VS2003 自动以管理员身份运行,那么 VS 版本选择器将无法运行 VS2003。我不知道为什么,但事实就是如此。
您可以关联 SLN 文件以使用 VS2003 devenv.exe 而不是 VSLauncher.exe 打开。这可行,但所有新的 SLN 文件(2005、2008、2010、2012,...)都无法打开。
所以最后一步是让 VSLauncher.exe 以管理员身份运行。如该线程所示,此操作自 KB2492386 起失败。卸载该更新是这个传奇的最后一步,让一切正常工作。