Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何要求并确保程序有管理员权限启动,并可以删除隐藏的文件?_C#_.net_Visual Studio_Windows 10_Admin - Fatal编程技术网

C# 如何要求并确保程序有管理员权限启动,并可以删除隐藏的文件?

C# 如何要求并确保程序有管理员权限启动,并可以删除隐藏的文件?,c#,.net,visual-studio,windows-10,admin,C#,.net,Visual Studio,Windows 10,Admin,各位开发者好 我试图给我正在创建的C#应用程序提供从闪存驱动器或其他文件夹中删除文件的能力,这需要管理员权限。但它不起作用 我是Win10机器上的管理员用户。我可以在文件资源管理器中删除文件。但是程序在尝试执行时抛出IOException(我正在使用几种方法中的任何一种来删除文件,包括与Win32的互操作) 我确实为程序项目创建并嵌入了一个应用程序清单(我使用的是Visual Studio 2017),并将requestedExecutionLevel元素的级别属性设置为“requireAdmi

各位开发者好

我试图给我正在创建的C#应用程序提供从闪存驱动器或其他文件夹中删除文件的能力,这需要管理员权限。但它不起作用

我是Win10机器上的管理员用户。我可以在文件资源管理器中删除文件。但是程序在尝试执行时抛出IOException(我正在使用几种方法中的任何一种来删除文件,包括与Win32的互操作)

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

顺便说一句,我看到两种不同的方法来检测程序是否以管理员权限运行:

public bool IsRunAsAdmin1()
{
    return Thread.CurrentPrincipal.IsInRole( WindowsBuiltInRole.Administrator.ToString() );
}
这似乎不起作用(总是返回false)。 和

  • 这确实有效
无论如何,即使我右键单击程序并以管理员身份运行它,它也会返回隐藏文件的Win32错误5(拒绝访问)

我想让它稳健地删除文件,而不考虑文件的属性。我该怎么做


谢谢你的帮助和见解,詹姆斯我不知道你说的是什么意思

该程序仍可以非管理员身份启动

如果正确设置了
app.manifest
文件(请参阅),则它将始终以管理员身份运行


我不确定隐藏的文件。我的快速建议是删除隐藏/只读标志(like),然后调用
文件。删除

我不知道你说的是什么意思

该程序仍可以非管理员身份启动

如果正确设置了
app.manifest
文件(请参阅),则它将始终以管理员身份运行


我不确定隐藏的文件。我的快速建议是删除隐藏/只读标志(如),然后调用
文件。删除

您所能做的就是告诉用户“以管理员身份运行”。你不能在这里编程。它会让病毒像地狱一样传播看看System.Security.Permissions.FileIOPermission。如果他们是管理员角色,他们应该能够要求“AllAccess”,然后做他们需要的事情-我相信即使程序不是以“以管理员身份运行”启动的(我在prod中使用它没有问题-我的人从不以“以管理员身份运行”)。。。(注意-我们不删除隐藏的-不过值得一试)您所能做的就是告诉用户“以管理员身份运行”。你不能在这里编程。它会让病毒像地狱一样传播看看System.Security.Permissions.FileIOPermission。如果他们是管理员角色,他们应该能够要求“AllAccess”,然后做他们需要的事情-我相信即使程序不是以“以管理员身份运行”启动的(我在prod中使用它没有问题-我的人从不以“以管理员身份运行”)。。。(注意-我们不删除隐藏的-但值得一试)
   public bool IsRunAsAdmin2()
    {
        WindowsIdentity id = WindowsIdentity.GetCurrent();
        WindowsPrincipal principal = new WindowsPrincipal( id );
        return principal.IsInRole( WindowsBuiltInRole.Administrator );
    }