“ClickOnce不支持请求执行级别requireAdministrator”。

所以我正在写一个需要访问registry的应用程序。 我没有触及任何构build设置,希望在添加其他触摸(如描述或名称)之前使其工作。

突然之间,我得到一个不会消失的错误。 ClickOnce does not support the request execution level 'requireAdministrator'. 现在,我没有在这个应用程序中触及ClickOnce。 我所做的只是包含一个请求这些权限的清单文件。

我现在的问题是,这个错误不会消失,我不能编译我的程序。 有什么build议在做什么? (旁注:我即将上床,明天下午我会检查一下)。

编辑:这个评论也给出了一个很好的答案。

点击一次,只要点击“发布”就会启用,无论您是否愿意! 如果您使用“requireAdministrator”,那么看起来您不能使用ClickOnce,因此不能“发布”您的项目。


原版的:

事实certificate,在安全选项卡下,选中“启用ClickOnce安全设置”。 即使我没有检查它。 无论如何,取消选中停止ClickOnce给我错误。 这花了一段时间find…

我知道这是一个古老的问题,但两年后我来到了这里:

您可以从项目的“安全”选项卡上禁用ClicKOnce以解决问题; 见下文:

在这里输入图像说明

如果您曾经使用发布向导或“立即发布”,则自动select一次点击checkbox…

看看你的app.Manifest文件,你会看到这个:

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

在评论中有说明,但只是删除“requireAdministrator”,并插入这个地方解决了我的问题:

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

我知道这是旧的,但我偶然发现它寻找答案。 在我的情况下,我使用发布function,我需要继续使用它。 我也需要访问pipe理function。 所以出于这个原因,上面的答案都没有为我工作。

我最终在我的应用程序开始时添加了一个方法,检查它是否以pipe理员身份运行,如果不是,则以pipe理员身份重新启动。 为此,您需要添加以下参考。

 using System; using System.Diagnostics; using System.Reflection; using System.Security.Principal; 

那么你将需要把这个地方,你的主要方法有方便的访问。 我使用WPF,所以我将它添加到MainWindow.xaml.cs中,但是可以在代码中的任何地方尽早添加它。 只要记住要添加“静态”这些方法,如果你需要它。

 private void AdminRelauncher() { if (!IsRunAsAdmin()) { ProcessStartInfo proc = new ProcessStartInfo(); proc.UseShellExecute = true; proc.WorkingDirectory = Environment.CurrentDirectory; proc.FileName = Assembly.GetEntryAssembly().CodeBase; proc.Verb = "runas"; try { Process.Start(proc); Application.Current.Shutdown(); } catch(Exception ex) { Console.WriteLine("This program must be run as an administrator! \n\n" + ex.ToString()); } } } private bool IsRunAsAdmin() { WindowsIdentity id = WindowsIdentity.GetCurrent(); WindowsPrincipal principal = new WindowsPrincipal(id); return principal.IsInRole(WindowsBuiltInRole.Administrator); } 

最后,在程序的开始处,添加对该方法的引用。 在我的情况下,我将它添加到MainWindow中,但将其添加到Main作品中。

 public MainWindow() { InitializeComponent(); AdminRelauncher(); //This is the only important line here, add it to a place it gets run early on. } 

希望这可以帮助!

我有同样的问题我通过取消选中“ 启用ClickOnce安全设置”来解决它在Visual Studio中find此选项右键单击您的项目==>属性==>select安全性==>启用ClickOnce安全设置 (此选项是已经检查,所以我没有选中它,我的问题得到解决)。

这个动作可以通过select“启用ClickOnce安全设置”来实现(因为它在发布期间不能被“取消选中”,如上所述),然后select“这是部分信任应用程序”。 “本地内联网”将在下拉菜单中自动select,非常好。

保存您的更改,发布应用程序,完成滑雪。 🙂 安全设置代码段

这是VB.NET的代码片段

 If Not New WindowsPrincipal(WindowsIdentity.GetCurrent).IsInRole(WindowsBuiltInRole.Administrator) Then Process.Start(New ProcessStartInfo With { _ .UseShellExecute = True, _ .WorkingDirectory = Environment.CurrentDirectory, _ .FileName = Assembly.GetEntryAssembly.CodeBase, _ .Verb = "runas"}) 

编辑:但是,如果你以这种方式部署,一些AV软件阻止你的代码。

只是

 Imports System.security 

U将不会出错,您的应用程序将以pipe理员身份运行