【问题标题】:Developing an application that runs commands as administrator开发以管理员身份运行命令的应用程序
【发布时间】:2012-06-07 19:40:22
【问题描述】:

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

我的应用程序是在 Visual Studio .NET 2005 中使用 Framework 2.0、C# 开发的可执行 winform 应用程序

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

实际起作用的代码是:

        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 的所有版本中运行
  • 是的,如果符合“Microsoft 政策”和应用要求(框架 2.0、API 或类似的东西,不能使用不是来自 microsoft 的 mods/controls/library),我可以使用解决方法

已编辑:

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

但是当您运行应用程序时,它会提示(带有常见的 UAC 提示)权限

【问题讨论】:

  • 我觉得在答案中写这个很愚蠢,但我认为 UAC 可以弹出并询问用户,我非常确定没有办法解决这个问题。
  • 看看能不能帮到你:Introducing ConsolR

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


【解决方案1】:

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

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

Enabling your application for uac on vista.

【讨论】:

  • 是的,我试过了,但它有很多问题,而且 C++ 与 C# 不同。无论如何+1的答案,我会继续搜索,如果我做不到,我会将其标记为答案
  • UAC 不能保持沉默。只有 Windows 附带的应用程序才能绕过 Windows 7 上的 UAC 提示。
  • 您必须创建与 Windows XP 兼容的专用 UAC 清单。 MSDN 有说明。 XP 中没有 UAC:您要么是管理员,要么是受限用户。要以管理员权限执行某些操作,您必须知道登录名和密码。
【解决方案2】:

可以通过运行命令的小服务来完成,并且服务进程安装程序必须具有属性Account on:LocalSystem。

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

它在 Win7 和 XP 上运行

MSDN Creating a Windows Service

注意事项:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 2011-09-24
    • 2010-12-19
    • 1970-01-01
    相关资源
    最近更新 更多