【问题标题】:Run part of a c# program with admin privileges以管理员权限运行 c# 程序的一部分
【发布时间】:2011-01-17 07:37:33
【问题描述】:

有没有办法从操作系统请求提升权限,“只是”c# 程序的“一部分”?

我正在使用 NUnit 编写一堆集成测试。我正在测试的一件事是被测应用程序是否正确连接到端口 843。测试在端口 843 上打开一个侦听套接字,然后向被测应用程序抛出各种响应,并验证应用程序是否正确运行.

但是,在端口 843 上打开侦听套接字需要管理员权限。

我想找到一种干扰最小的方法来运行这个测试。我可以以 root/admin 身份运行整个 NUnit 套件,但这会使很多东西以 root 身份运行,实际上不需要以 root 身份运行,我想阻止这种情况。

【问题讨论】:

    标签: c# nunit privileges


    【解决方案1】:

    如果需要,下面的代码将帮助您了解当前登录的用户是否为管理员:

    using System;
    using System.Security.Principal; 
    
    class Test
    {
        public static void Main()
        {
            if (new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator))
            {
                Console.WriteLine("I am an admin.");
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      不。海拔是全部或全部。通常,如果需要提升,应用会引导自身进入提升状态。

      【讨论】:

      【解决方案3】:

      是的,你可以看看LogonUser 函数。这是sample

      【讨论】:

      • 我可能弄错了,但模拟不会通过 UAC。不?我知道我过去在 xp 和 nt 上使用过它,但不是 v+
      • 我一直在寻找这个答案,我认为可以只提升一个线程来执行某些功能,但我真的不知道如何
      【解决方案4】:

      必须以提升的权限启动进程才能获得提升的权限。您不能在“处理中”更改您的提升状态。

      解决此问题的一种方法是使用任务管理器。如果您运行“未提升”并单击“显示所有用户的进程”,它基本上会杀死旧的任务管理器进程并启动一个具有提升权限的新进程以完成这项工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-07
        • 2017-07-03
        • 2013-07-24
        • 2012-08-27
        • 1970-01-01
        • 2014-05-14
        • 2013-03-04
        • 2014-05-18
        相关资源
        最近更新 更多