如何跳过VirtualStore,直接从Program files文件夹中读取文件

本文关键字:文件夹 files 读取 文件 Program VirtualStore 何跳过 | 更新日期: 2023-09-27 18:14:04

我在Windows 10电脑上有一个c#应用程序。安装文件夹(C:'Program files (x86)'xxx)中有我想要读取的设置文件,但除非用户具有管理员权限,否则不能编辑。问题是,windows将这些设置文件复制到VirtualStore,并将所有读取重定向到那里,而作为管理员运行的同一个应用程序在Program files文件夹中看到原始设置文件。

我的问题:是否有一种方法可以使应用程序看到程序文件中的原始文件,即使不以管理员身份运行?我只是想看,不想编辑。

如何跳过VirtualStore,直接从Program files文件夹中读取文件

Program Files (x86)文件夹中读取文件不需要提升权限。检查如何打开文件以供阅读。您应该在普通用户模式和提升模式下指定不同的FileAccess标志。对于普通用户模式,它应该用"FileAccess"打开。读":

using (FileStream settingsFile = new FileStream(@"C:'Program Files (x86)'xxx", FileMode.Open, FileAccess.Read))
{
  // Do the job
}

使用IsProcessElevated方法检测应用程序是否以高权限运行。根据结果,您可以选择适当的FileAccess模式。

在Program files中查看原始文件的方法是不要在那里写东西(并且像Nikita指出的那样打开只读文件)。VirtualStore不是用来使用的,而是用来解决应用程序问题的。例如,当当前的Windows(自NT以来)可以同时拥有来自不同用户的多个会话时,为旧的单用户Windows编写的应用程序会出现故障。

如果一个应用程序想要修改所有用户之间共享的数据文件,它应该将这些文件保存到all users Profile。如果是用户数据,则可以将数据存储在用户配置文件中的Application data文件夹中。在应用程序数据中,如果您希望数据是漫游还是本地,您仍然可以选择。

这些文件夹的路径在不同的Windows版本上是不同的。Windows安装程序已将属性设置为路径。应用程序有许多可以使用的接口。参考在应用程序中使用已知文件夹和SHGetKnownFolderPath获取一个接口。

除此之外,对程序文件的访问在UAC后面。