1

我负责维护一个 VB6 应用程序,我在 Windows 7 上遇到了一个奇怪的行为。

当应用程序安装到程序文件(x86)(或者我假设它没有写入权限的任何目录)时,大多数时候,当它去本地保存文件时,它最终会出现在那个奇怪的虚拟存储位置. 这是可以接受的。但偶尔,它会尝试在本地保存并给出错误,说您不允许在此处保存,并询问您是否要保存在其他地方。好吧,至少,如果您尝试将其保存为新文件,它会这样做,如果您尝试将其保存为现有文件,则会因运行时错误 75 而崩溃。

这两个文件都只是用“Open filename As #1”打开的——谁能给我更多信息,说明是什么迫使它使用或不使用用户无权写入的文件夹中的虚拟存储?

或者,我尝试以管理员身份运行该应用程序,但它在启动时崩溃, - 还没有弄清楚为什么程序会在锁定模式下运行而不是以管理员身份运行。

4

1 回答 1

1

好吧,你自己已经很清楚了:有些地方没有海拔就不能写,有些地方根本就不行。对于某些位置,Windows 会进行救援并将文件重定向到 VirtualStore。其中包括:

  • 程序文件和程序文件 (x86)
  • 视窗
  • 程序数据

它认为永远不要假设文件操作不会出错是一种很好的编程习惯。您可以预见错误并事先警告用户,并且必须将任何文件操作嵌入On Error Goto块中。

关于程序在提升运行时崩溃(这确实是最后的解决方案,尽量避免这种情况):VirtualStore 的问题是您最终可能会得到两个版本的文件:提升时写入的版本和不提升时写的。当您运行提升程序时,它会突然使用其他文件而不是以前,因此可能会出现其他行为,包括崩溃。同样的事情也适用于注册表项

更多关于 UAC 虚拟化(优秀文章!)

祝你好运!

于 2012-05-12T06:38:53.157 回答