使用 .NET 代码从用户组访问“程序文件”文件夹

本文关键字:文件 程序 程序文件 文件夹 访问 NET 代码 用户组 使用 | 更新日期: 2023-09-27 18:32:28

我在互联网上搜索了这个,但找不到确切的答案。在我的应用程序中,我有一个功能,可以将文件夹中的文件(例如 pqr(复制到用户想要的位置。源文件夹的位置是已安装应用程序的位置(例如 c:''Program Files''abc''pqr(。当用户以"管理员权限">登录到计算机时,用户可以使用此功能。但是,当用户使用"用户权限">(非管理员用户(登录到计算机时,此功能会引发异常,即拒绝访问 c:''Program Files''abc''pqr 文件夹。我试图通过使用以下属性来复制方法来提升用户权限:

[PrincipalPermission(SecurityAction.Demand, Role = @"BUILTIN'Administrators")]
[PermissionSet(SecurityAction.Demand, Name="FullTrust")]

我还尝试添加具有以下更改的清单文件:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

但这种方法都没有奏效。

然后我在D驱动器上安装了我的应用程序。之后,当我尝试使用非管理员用户时,该功能按预期工作。
因此,当应用程序安装在 C:''Program Files 中时,功能对非管理员用户不起作用。但是在将应用程序安装到另一个位置后,它适用于非管理员用户。

所以我的问题是,是否可以在应用程序中以编程方式将 C:''Program Files 授予非管理员用户的权限,或者我们需要管理员用户才能使用此功能?

使用 .NET 代码从用户组访问“程序文件”文件夹

  1. 更改清单是提升权限的最简单方法。在 VS 中更改它。但是,要求常规软件具有管理员权限是一种不好的做法。

  2. 您可以在安装过程中使所有用户都可以访问程序文件夹。例如,可以使用InnoSetup进行,并在[Files]组中Permissions: users-modify

  3. 如果源文件在Program Files中,而您在其他位置复制,则问题可能出在打开源文件时文件访问错误。仅开放供阅读。

var startInfo = new ProcessStartInfo("yourApplication.exe") { Verb = "runas" };
Process.Start(startInfo);
Environment.Exit(0);

application.exit();

如果您使用的是WinForms

但是要小心执行此代码一次,因为如果您将其放在 load 事件中,您将在内存中溢出