Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
禁用文件和注册表虚拟化后,我的C#应用程序在安装后无法正常工作_C#_Windows_File_Vb6_Registry Virtualization - Fatal编程技术网

禁用文件和注册表虚拟化后,我的C#应用程序在安装后无法正常工作

禁用文件和注册表虚拟化后,我的C#应用程序在安装后无法正常工作,c#,windows,file,vb6,registry-virtualization,C#,Windows,File,Vb6,Registry Virtualization,我们有一个独立的C#桌面应用程序,它也使用VB6代码来编写.md5文件中的一些逻辑 由于windows文件和注册表虚拟化,当系统将注册表读取重定向到注册表中的其他位置时,某些计算机上的某些注册表项无法获取值。为了解决这个问题,我们禁用了应用程序的虚拟化 这个问题已经解决了,但现在我们面临一个与VB6代码相关的新问题,这很奇怪。当我使用visual studio(VS15)通过代码库运行应用程序时,它工作正常事件当我直接从本地代码库运行exe时,它工作正常,但当我通过“开始”菜单(安装应用程序后)

我们有一个独立的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.tristatefulse)

来自HRESULT的异常:0x800A0035(CTL_E_FILENOTFOUND)

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

如果它需要管理员权限,“为什么是”可以很好地处理代码库,因为我通常从代码库或不是以管理员身份运行的Visual studio运行exe。只有当我安装了应用程序并正常运行时才会发生这种情况

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

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

我检查了使用CreateTextFile()函数从VB6代码创建虚拟文本文件的方法,发现VB6代码中存在问题,因为它在代码库中工作正常,但如果我禁用应用程序的虚拟化,则无法在已安装的应用程序版本中工作


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

禁用文件和注册表虚拟化后,我的C#应用程序在安装后无法正常工作。您确定必须禁用虚拟化吗?还有一些更细微的转义路径(例如注册表中的
Wow6432Node
、文件系统上的
sysnative
等)如果您已经控制了代码,您应该使用它。是的,如果我无法通过禁用虚拟化找到解决方案,那么我必须恢复更改并尝试找到其他方法,因为我无法通过禁用虚拟化引入其他缺陷。但我只是想知道为什么它可以很好地与我的代码库一起工作,而不是与安装的应用程序一起工作,或者在我以管理员身份运行应用程序时与一起工作。我可以控制代码你试图访问的完整路径是什么?我怀疑您正在试图访问受保护区域中的文件。很抱歉,答复太晚。我发现了问题并修复了它。实际上,问题不在于tvFSOCP.OpenTextFile函数或“.md5”文件创建。问题完全不同,我们使用一个exe生成.PSI文件,该exe在当前工作目录或通常主程序exe路径生成文件。现在,由于我禁用了应用程序的虚拟化,当我在安装后运行应用程序时,操作系统会忽略生成.PSI文件的调用,就像在那种情况下一样,工作目录被设置到程序文件夹中。禁用文件和注册表虚拟化后,我的C#应用程序在安装后无法正常工作。您确定必须禁用虚拟化吗?还有一些更细微的转义路径(例如注册表中的
Wow6432Node
、文件系统上的
sysnative
等)如果您已经控制了代码,您应该使用它。是的,如果我无法通过禁用虚拟化找到解决方案,那么我必须恢复更改并尝试找到其他方法,因为我无法通过禁用虚拟化引入其他缺陷。但我只是想知道为什么它可以很好地与我的代码库一起工作,而不是与安装的应用程序一起工作,或者在我以管理员身份运行应用程序时与一起工作。我可以控制代码你试图访问的完整路径是什么?我怀疑您正在试图访问受保护区域中的文件。很抱歉,答复太晚。我发现了问题并修复了它。实际上,问题不在于tvFSOCP.OpenTextFile函数或“.md5”文件创建。问题完全不同,我们使用一个exe生成.PSI文件,该exe在当前工作目录或通常主程序exe路径生成文件。现在,由于我禁用了应用程序的虚拟化,在安装后运行应用程序时,操作系统会忽略生成.PSI文件的调用,就像在那种情况下一样,工作目录被设置到程序文件夹中。