C# 开发以管理员身份运行命令的应用程序

C# 开发以管理员身份运行命令的应用程序,c#,.net,windows,.net-2.0,uac,C#,.net,Windows,.net 2.0,Uac,首先,是的,我在网上搜索过这个话题,但我的案例更具体一些,所以这就是我提问的原因 我的应用程序是一个可执行的winform应用程序,在Visual Studio.NET 2005中使用Framework 2.0,C# 应用程序需要在命令行上运行一些命令。此命令必须以管理员身份运行 实际有效的代码是: string output = ""; Process Consola = new Process(); ProcessStartInfo Conso

首先,是的,我在网上搜索过这个话题,但我的案例更具体一些,所以这就是我提问的原因

我的应用程序是一个可执行的winform应用程序,在Visual Studio.NET 2005中使用Framework 2.0,C#

应用程序需要在命令行上运行一些命令。此命令必须以管理员身份运行

实际有效的代码是:

        string output = "";
        Process Consola = new Process();
        ProcessStartInfo ConsolaStartInfo = new ProcessStartInfo();
        ConsolaStartInfo.FileName = "cmd.exe";
        ConsolaStartInfo.WorkingDirectory = System.Environment.SystemDirectory;
        ConsolaStartInfo.UseShellExecute = !NeedOutput;
        ConsolaStartInfo.RedirectStandardOutput = NeedOutput;
        Consola.StartInfo = ConsolaStartInfo;
        ConsolaStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        ConsolaStartInfo.CreateNoWindow = true;
        ConsolaStartInfo.Arguments = "/C " + CommandToPerform;
        ConsolaStartInfo.Verb = "runas";
        Consola.Start();
        Consola.WaitForExit();
其中:

    CommandToPerform is a string var with a command
    NeedOutput is true or false depending if i need a return output or not.
   (This works)
第一个技巧是:如果我在Windows7上以管理员的身份运行VisualStudio,那么这个应用程序可以像预期的那样完美地工作

第二个技巧是:如果我不是以管理员的身份运行VisualStudio,那么这个应用程序会像预期的那样完美工作,但是每次执行命令行时,该过程都会要求我在屏幕上进行安全验证(UAC)

是的,我试着使用清单,但是我在编译它时遇到了很多问题。它有时返回9009错误,很多种错误

因此,我的问题是:

1) 不需要向用户请求权限就可以这样做吗?应用程序必须是静默的。这才是真正的问题。如果是的话

2) 如何为以管理员身份运行此命令的应用程序定义清单?我想念什么?申请表上的符号是一样的吗

3) 我的应用程序能否以管理员身份运行这些命令而不以管理员身份运行?这是一个完美的场景,将使用此应用程序的用户不能成为/不能成为管理员

4) 这对XP有效吗?XP要求UAC?(在开发最低要求版本之前,我无法在XP上测试它)

任何一种想法/解决方案/技巧都将受到欢迎,如果最终结果不是一个解决方案,那么更好的解决方法将被标记为答案(我的评分为100%)

注意事项:

  • 我无法根据客户要求将框架从2.0迁移到上面的版本
  • 我无法根据客户端要求将Visual Studio.NET 2005迁移到上述版本
  • 应用程序需要在从XP(无任何SP)到Windows 7的所有版本上运行
  • 是的,如果在“Microsoft策略”和应用程序要求下,我可以使用变通方法(不能使用Framework 2.0、API或类似工具,不能使用非Microsoft提供的mods/controls/library)
编辑:

  • 向以下项添加密钥的解决方案:HKEY\U CURRENT\U USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers有效

但是当您运行应用程序时,它会提示(使用通用UAC提示)权限

那么问题1)和3)的答案很简单:这是不可能的。因为如果可能的话,整个UAC将毫无用处

我不知道XP的兼容性(但我认为XP会忽略清单),不幸的是,我也没有使用UAC提示符和VS2005的经验。我只在VS2008和更高版本中做过这件事,所以我也帮不了你。我确实找到了VS2005的指南,但您可能也看到了相同的指南:


.

可以通过执行一个运行该命令的小服务来完成,并且服务进程安装程序的属性帐户必须位于:LocalSystem

因此,您的应用程序不需要任何要求或清单

它在Win7和XP上工作

注:

LocalSystem帐户具有广泛的权限,包括 写入事件日志。请谨慎使用此帐户,因为它 可能会增加恶意软件攻击的风险。其他 任务,考虑使用LoalService帐户,它充当 本地计算机上的非特权用户,并提供匿名 任何远程服务器的凭据


我觉得在这个问题上写这个是愚蠢的,但是我认为UAC是在那里弹出并询问用户,我非常确信没有办法。看看这是否能帮助你:是的,我试过了,但是它有很多问题,C++对于C++是不同的。无论如何+1对于答案,我会继续搜索,如果我做不到,我会把它标记为answerUAC不能沉默。只有Windows附带的应用才能绕过Windows 7上的UAC提示。您必须创建与Windows XP兼容的专用UAC清单。MSDN有说明。XP中没有UAC:您可以是管理员,也可以是受限用户。要执行具有管理员权限的操作,您必须知道登录名和密码。