2010-02-16 191 views
4

有没有办法从操作系统请求提升权限,因为“只是c#程序的一部分”?以管理员权限运行c#程序的一部分

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

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

我想找到能够运行此测试的最不干扰的方式。我可以以root/admin身份运行整个NUnit套件,但是这会让很多东西以root身份运行,并不需要以root身份运行,这是我想要阻止的。

回答

2

没有。海拔全是或没有。通常情况下,如果需要提升,应用会将自身引导到提升状态。

0

是的,你可以看看LogonUser函数。这里有一个sample

+0

我可能会被误认为冒名顶替,但不会通过UAC。没有?我知道我曾经在xp和nt上使用它,但不是v + – 2010-02-16 09:16:11

+0

不是我。诺言。 ;-) – 2010-02-16 09:22:28

+0

我一直在寻找这个答案,我认为有可能只提升一个线程来执行一些功能,但我真的不知道如何 – 2012-07-30 17:11:24

1

如果需要下面的代码将有助于你找出如果登录用户当前为admin与否:

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."); 
     } 
    } 
} 
0

进程具有以提升的权限有提升的权限启动。您无法在“正在处理”中更改您的提升状态。

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