如何要求并确保程序具有管理权限才能启动,并且可以删除隐藏的文件?

问题描述:

你好开发伙伴,如何要求并确保程序具有管理权限才能启动,并且可以删除隐藏的文件?

我想给一个C#应用程序,我正在创建从闪存驱动器或其他文件夹中删除文件,需要管理员权限的能力。但它不工作!

admin用户在我的Win10箱。我可以删除文件资源管理器中的文件。但是,当它试图做它的程序抛出IOException(我使用任何几种方法来删除这些文件,包括interoping Win32的)。

我没有创建并嵌入一个应用程序清单的程序项目(我使用Visual Studio 2017),并设置requestedExecutionLevel元素“requireAdministrator”的级别属性。在项目属性中,它确实将该文件app.manifest显示为它的一部分。但是,这似乎没有任何成就 - 该程序仍然可以作为管理员启动。

顺便说一句,我看到了两个不同的方法来检测程序是否正在运行,以具有管理员私法:

public bool IsRunAsAdmin1() 
{ 
    return Thread.CurrentPrincipal.IsInRole(WindowsBuiltInRole.Administrator.ToString()); 
} 

这似乎并不奏效(总是返回false)。 和..

public bool IsRunAsAdmin2() 
    { 
     WindowsIdentity id = WindowsIdentity.GetCurrent(); 
     WindowsPrincipal principal = new WindowsPrincipal(id); 
     return principal.IsInRole(WindowsBuiltInRole.Administrator); 
    } 
  • 工作。

不管怎样,甚至当我在程序右键单击并运行它以管理员身份 - 它返回的Win32错误5隐藏文件(拒绝访问)。

我要有力使这个删除文件,无论文件的属性。我怎样才能做到这一点?

谢谢您的帮助和见解,詹姆斯

+0

你所能做的就是告诉用户“以管理员身份运行”。你不能编程。它会使病毒像地狱一样传播 –

+0

看看System.Security.Permissions.FileIOPermission。如果他们在管理员角色,他们应该能够要求“AllAccess”,然后做他们需要的 - 我相信,即使该程序不是以“以管理员身份运行”开始的(我在prod中使用它没有问题 - 我的球员从不以“Run as”开头)...(注意 - 我们不会删除隐藏 - 尽管值得一试) – Aaron

我不知道你是什么意思

意味着仍然可以没有推出以管理员身份的程序。

如果您安装了app.manifest文件正确(见this),那么它总是会以管理员身份运行。

我不知道的隐藏文件。我快速的建议是刚删除隐藏/只读标志(如this),然后调用File.Delete