8

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

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

4

2 回答 2

7

您不需要提升权限即可从Program Files (x86)文件夹中读取文件。检查您如何打开文件进行阅读。FileAccess您应该在普通用户模式和提升模式下指定不同的标志。对于普通用户模式,应使用“FileAccess.Read”打开它:

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

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

于 2016-10-26T15:11:55.063 回答
1

在 Program Files 中查看原始文件的方法是不要在那里写入(为此,Nikita 指出以只读方式打开文件)。VirtualStore 不是用来使用的,而是用来修复应用程序问题的。例如,当当前的 Windows(自 NT 起)可以同时拥有来自不同用户的多个会话时,这些问题是由为旧的单用户 Windows 编写的应用程序损坏造成的。

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

这些文件夹的路径在不同的 Windows 版本上是不同的。Windows Installer 将属性设置为路径。应用程序有许多可以使用的接口。有关一个接口,请参阅使用应用程序中的已知文件夹SHGetKnownFolderPath

除此之外,对 Program Files 的访问在UAC之后。您应该阅读它以获取所有详细信息。

于 2016-11-02T10:32:19.550 回答