1

我们有独立的 C# 桌面应用程序,它也使用 VB6 代码将一些逻辑写入 .md5 文件。

由于 Windows 文件和注册表虚拟化,某些机器上的某些注册表项无法获取值,因为系统会将注册表读取重定向到注册表中的某个其他位置。为了解决这个问题,我们为我们的应用程序禁用了虚拟化。

这个问题已经解决了,但现在我们面临一个与 VB6 代码相关的新问题,这很奇怪。当我使用Visual Studio(VS15)通过我的代码库运行应用程序时,当我直接从本地代码库运行exe时它工作正常,但当我通过开始菜单运行应用程序时(安装应用程序后)它确实不起作用并给出下面给出的例外。如果我以管理员身份运行应用程序,它工作正常。

我得到的例外来自VB6代码:

tvsFilename = tvsReleaseFolder & "\Packages\" & tvsPackageName & ".md5" tvTextStream = tvFSOCP.OpenTextFile(tvsFilename, Scripting.IOMode.ForAppending, False, Scripting.Tristate.TristateFalse)

HRESULT 异常:0x800A0035 (CTL_E_FILENOTFOUND)。

我检查了对该位置的访问权限,并且所有权限都授予了用户。

如果它需要管理员权限,为什么代码库可以正常工作,因为我通常从代码库或未以管理员身份运行的 Visual Studio 运行 exe。它仅在我安装应用程序并正常运行时发生。

我再次检查以启用虚拟化并安装更新的应用程序,现在它可以工作了。

但是我们必须为我们的应用程序禁用虚拟化才能获得正确的注册表位置。

我检查了使用 CreateTextFile() 函数从 VB6 代码创建虚拟文本文件,发现问题存在于 VB6 代码中,因为它适用于代码库但不适用于已安装的应用程序版本,如果我禁用虚拟化我的应用程序。

我搜索了很多主题,但没有发现任何相关的问题。任何帮助都会给我进一步前进的方向。

4

0 回答 0