标签: virtualstore

如何防止文件重定向从程序数据到VirtualStore\ProgramData

我正在使用C#和.net 2.0

我将程序数据保存在以下文件中: C:\Program Data\MyProgramName\fileName.xml

安装并运行我的应用程序一次后我卸载它(在卸载期间我从"程序数据"中删除所有文件)然后重新安装应用程序,然后运行它.

奇怪的是,我的应用程序就像程序数据中存在的文件一样启动 - 意思是,即使数据文件被删除,我的应用程序中也有旧数据.

运行时:

File.Exists("C:\ Program Data\MyProgramName\fileName.xml")

即使我确定该文件不存在,我仍然"真实".

当我以管理员身份运行应用程序然后文件不存在时,事情就变得陌生了.

经过研究,我发现在运行我的应用程序时没有管理员权限而不是获取:

"C:\ Program Data\MyProgramName\fileName.xml"我得到"C:\ Users\userName\AppData\Local\VirtualStore\ProgramData\MyProgramName\fileName.xml"

确实有一个文件存在于以前的安装中(我显然没有删除,因为我不知道它存在).所以请指导我如何在没有管理员权限的情况下运行应用程序时停止此操作.我不想在VirtualStore文件夹中自动创建任何文件.请讨论阻止这种情况的所有可能方法.谢谢

virtualstore windows-7 c#-2.0

11
推荐指数
1
解决办法
2万
查看次数

如何检测到Windows VirtualStore的文件重定向?

自Win Vista发布以来,微软为以32位进程运行的传统应用程序引入了文件虚拟化.作为Microsoft用户帐户控制(UAC)的一部分发布,尝试写入受操作系统保护的任何位置的任何遗留应用程序都将重定向到VirtualStore.

此时,已采取措施确保有问题的应用程序现在作为支持UAC的64位进程运行,但是,这对解决将用户数据迁移到被认为是安全的虚拟化位置的问题几乎没有作用.

在解决此问题时,我发现在处理多个用户帐户时,在位于C:\ Program Files(x86)\ MyApp\Data的旧路径中进行了一些更改,同时,已对VirtualStore位于%localappdata%\ VirtualStore\Programs\MyApp\Data.问题是,如何检测是否正在进行任何文件/文件夹虚拟化以及如何合并这两个位置?

编辑:我发现几个网站详细说明了问题以及如何复制它,但没有包含修复方法.我确实找到了这个参考文件FILE_ATTRIBUTE_VIRTUAL来定义一个看起来很有希望的文件属性 - 我在某个地方找到了另一个引用,虽然我不记得在哪里,这表明这是Windows使用的属性,表明正在进行文件虚拟化并标记请求重定向.

这些链接描述了这个问题:

http://www.c-sharpcorner.com/uploadfile/GemingLeader/windows-file-and-registry-virtualization/

http://www.codeproject.com/Articles/66275/Windows-Vista-File-and-Registry-Virtualization

http://download.microsoftvirtuallabs.com/download/8/a/7/8a71365b-4c80-4e60-8185-8f12f59bf1d4/UACDataRedirection.pdf

c# virtualization uac virtualstore

10
推荐指数
1
解决办法
1万
查看次数

如何跳过VirtualStore并读取Program Files文件夹中的文件?

我在Windows 10 PC上有ac#应用程序.我想要读取的安装文件夹(C:\ Program Files(x86)\ xxx)中有设置文件,但除非用户具有管理员访问权限,否则不进行编辑.问题是Windows正在将这些设置文件复制到VirtualStore并重定向所有读取 - 而管理员运行的同一个应用程序会看到Program Files文件夹中的原始设置文件.

我的问题:有没有办法让应用程序看到程序文件中的原始文件,即使不以管理员身份运行?我只想阅读它们,而不是编辑它们.

c# virtualstore windows-10

8
推荐指数
1
解决办法
1709
查看次数

如何禁用VirtualStore for C++程序?

我希望我的程序在尝试在C:\驱动器的根目录(例如:)的受保护位置创建文件时抛出错误FILE* FileHandle = fopen("\\file.txt", a).而是在%APPDATA%下的虚拟存储中创建文件.

如何禁用该虚拟商店?

谢谢

编辑:只是要明确,我不是要求如何规避安全性并在受保护的位置创建我的文件.我希望文件创建失败,这样我就可以告诉用户他是个白痴.

c++ windows file-io fopen virtualstore

7
推荐指数
2
解决办法
4767
查看次数

从.Net写入HKEY_LOCAL_MACHINE不会在Vista或Windows 7中虚拟化?

我无法理解Vista和/或Windows 7中注册表操作的VirtualStore虚拟化.我认为在以标准用户身份运行时尝试将某些内容写入HKEY_LOCAL_MACHINE根目录会提示Windows虚拟化操作并写入HKEY_CURRENT_USER/Classes/VirtualStore /而是机器.我已经看到几个较旧的应用程序的行为完全相同.

但是,当尝试在C#和.Net4中复制该行为时,对HKLM的写入操作失败,而是使用UnauthorizedAccessException.有没有办法强制虚拟化?

为这个问题提供一些上下文:我正在尝试阅读和操作最初由另一个遗留应用程序创建的注册表项.在Vista或Windows 7中,这些将位于VirtualStore中.我想为WinXP及以上版本使用相同的注册表访问逻辑,并认为我的注册表操作将与旧版应用程序中的操作一样虚拟化(并且会因为相同的键而操作).这不能按预期工作,我知道的唯一解决方法是专门访问VirtualStore路径,如果用户运行Vista或7并启用了UAC ......但是,看起来很难看,特别是如果微软决定更改虚拟化行为未来的Windows版本.

c# registry virtualstore

6
推荐指数
1
解决办法
1614
查看次数

获取存储在VirtualStore中的日志文件的真实路径

我的应用程序将日志文件存储在一个位置,根据管理员设置,该文件可以重定向到VirtualStore中的文件夹。他们有时最终会出现例如:

日志文件位于:

C:\Users\-my username-\AppData\Local\VirtualStore\Program Files (x86)\ *my-application* \logs
Run Code Online (Sandbox Code Playgroud)

C#认为它在这里:

C:\ Program Files(x86)\ my-application \ logs

这只是代码一部分中的问题-一个试图在记事本中打开日志文件的按钮。它运行Process.Start(path-where-application-thinks-log-files-are);

如果我使用File.Exists(path-where-application-thinks-log-files-are)进行测试;我是对的-因为C#知道要在VirtualStore位置查找。但是,当我尝试启动文件时,它失败了。

所以我的问题是,从Process.Start()命令的角度来看,有没有办法将路径转换为正确的位置?

c# uac virtualstore

3
推荐指数
1
解决办法
1937
查看次数