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

时间:2012-06-07 19:40:23

标签: c# .net windows .net-2.0 uac

首先,是的,我在互联网上搜索这个主题,但我的情况稍微具体一点,所以这就是我提问的原因。

我的应用是一个可执行的winform应用程序,使用Framework 2.0,C#

在Visual Studio .NET 2005中开发

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

实际运作的代码是:

        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)

第一个提示是:如果我在Windows 7上以管理员身份运行Visual Studio,则此应用程序可以正常运行。

第二个提示是:如果我以管理员身份运行Visual Studio,此应用程序可以正常运行,但每次执行命令行时,该过程都要求我在屏幕上进行安全验证(UAC)

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

所以我的问题是:

1)可以在不向用户询问权限的情况下这样做吗?应用程序必须保持沉默。这是真正的问题。如果是的话......

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

3)我的应用程序可以以管理员身份运行这些命令而无需以管理员身份运行这是完美的场景,使用此应用程序的用户不能/不能成为管理员。

4)这适用于XP? XP要求UAC? (在开发最低要求版本之前,我无法在XP上测试)

任何想法/解决方案/提示都将受到赞赏,如果在决赛中不是解决方案,那么更好的解决方法将标记为答案(我有100%的率)

备注:

  • 我无法根据客户要求将框架从2.0迁移到上述版本。
  • 我无法通过客户端要求将Visual Studio .NET 2005迁移到上述版本。
  • 应用程序需要针对从XP(没有任何SP)到Windows 7的所有版本运行
  • 是的,我可以使用一个解决方法IF在“Microsoft策略”和应用程序要求(Framework 2.0,API或类似的东西,不能使用微软的mods / controls /库)

编辑:

  • 将密钥添加到以下内容的解决方案:HKEY_CURRENT_USER \ Software \ Microsoft \ Windows NT \ CurrentVersion \ AppCompatFlags \ Layers WORKED。

但是当你运行应用程序时,它会提示(使用常见的UAC提示符)权限

2 个答案:

答案 0 :(得分:2)

问题1)和3)的答案很简单:这是不可能的。因为如果可能的话,整个UAC根本没用。

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

Enabling your application for uac on vista

答案 1 :(得分:0)

可以执行一个运行命令的小服务,服务进程安装程序必须使用属性Account on:LocalSystem。

因此,您的申请不需要任何要求或清单。

它正在Win7和XP上运行

MSDN Creating a Windows Service

并注意:

  

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