【问题标题】:VB6 App on Windows 7 Only Saves to Virtual Store SometimesWindows 7 上的 VB6 应用程序有时仅保存到虚拟商店
【发布时间】:2012-05-20 14:27:45
【问题描述】:

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

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

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

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

【问题讨论】:

  • 不是“锁定模式”而是“标准用户模式”。当您的程序工作时,它通过 appcompat 工作(这是虚拟化的来源)。您在这里所拥有的被称为“LUA 错误” - 毫无疑问,它一个编程错误。只需将文件存储在适当的位置即可修复它。
  • 也许msdn.microsoft.com/en-us/library/bb756960.aspx 可能有助于回答您的一些问题。

标签: windows-7 vb6 crash virtualstore


【解决方案1】:

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

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

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

关于程序在提升运行时崩溃(这确实是最后的解决方案,尽量避免这种情况):VirtualStore 的问题是您可以最终得到一个文件的两个版本:一个写在提升和未提升时写的一个。当您运行提升程序时,它会突然使用其他文件而不是以前,因此可能会出现其他行为,包括崩溃。 The same thing applies to registry keys.

More over UAC Virtualization(好文章!)

祝你好运!

【讨论】:

  • 这很奇怪。其中一个对话框透明地保存到虚拟存储中,另一个即使对话框表明它是同一目录,也拒绝保存。还没弄清楚为什么。有问题的警告说:“您无权在此位置保存。” -- 而不是保存到虚拟商店。
  • 好吧,它甚至发生在新创建的文件中。有趣的是,虚拟化似乎只在某些扩展名下失败,例如 .wrs 和 .wsc
  • @ChadMourning 我发现了一些东西:可执行文件未虚拟化,因此在尝试将它们写入系统文件夹(如 Program Files)时会引发异常。见:windowsecurity.com/articles/…
猜你喜欢
  • 1970-01-01
  • 2014-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-07
  • 1970-01-01
相关资源
最近更新 更多