使用 .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 授予非管理员用户的权限,或者我们需要管理员用户才能使用此功能?
-
更改清单是提升权限的最简单方法。在 VS 中更改它。但是,要求常规软件具有管理员权限是一种不好的做法。
-
您可以在安装过程中使所有用户都可以访问程序文件夹。例如,可以使用InnoSetup进行,并在
[Files]
组中Permissions: users-modify
。 -
如果源文件在
Program Files
中,而您在其他位置复制,则问题可能出在打开源文件时文件访问错误。仅开放供阅读。
var startInfo = new ProcessStartInfo("yourApplication.exe") { Verb = "runas" };
Process.Start(startInfo);
Environment.Exit(0);
或
application.exit();
如果您使用的是WinForms
但是要小心执行此代码一次,因为如果您将其放在 load 事件中,您将在内存中溢出