【问题标题】:C# Get Administrator Rights For A Single MethodC# 获取单个方法的管理员权限
【发布时间】:2023-03-31 00:51:01
【问题描述】:

我有一个方法/事件Form1_Load 我想给它Administrator Rights

因为在那个方法/事件中我将我的程序与我的扩展关联,也不想以管理员身份启动应用程序,如果我这样做,该程序将无法正常工作

所以我有一个代码:

[PrincipalPermission(SecurityAction.Demand, Role = @"BUILTIN\Administrators")]

private void Form1_Load(object sender, EventArgs e)
{
...
}

但不起作用而且我的应用程序出错:

未授权访问异常

我该如何解决这个问题?

【问题讨论】:

  • 您的代码要求用户是管理员,但我不认为您的意思是这样吗?您想提升用户权限吗?这是获胜表格吗?
  • 是的,需要管理员权限来做关联,这是 WinForms
  • 我建议你在走得太远之前阅读并吸收 Raymond Chen 的 What if two programs did this?
  • 请看我更新的答案,应该更接近你想要做的。

标签: c# winforms methods admin


【解决方案1】:

“将我的程序与我的扩展关联”:你的设计是错误的。当您的程序安装时,该关联就完成了。而且完全没有问题:安装程序正在提升运行。

【讨论】:

  • 我的程序没有安装,是外部的
【解决方案2】:

您不会喜欢这个答案,但您不能通过一种方法提升用户,而是需要在整个应用程序加载时请求提升。

请参阅https://msdn.microsoft.com/en-us/library/bb756929.aspx?f=255&MSPPError=-2147217396 了解如何执行此操作。

这也很有帮助https://code.msdn.microsoft.com/windowsapps/CSUACSelfElevation-644673d3

编辑:

如果你有一个任务要做,比如关联一个扩展,那么你可以在一个单独的 EXE 中编写逻辑,该 EXE 只执行该任务。然后你可以从你的主程序启动那个EXE

 System.Diagnostics.Process.Start("<path to exe>");

如果您遵循上述链接中的建议,您的 EXE 将运行并请求提升,并且应该能够执行您需要的操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-02
    • 2014-05-04
    • 2014-05-19
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 2014-04-18
    相关资源
    最近更新 更多