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

本文关键字:命令 应用程序 运行 身份 管理员 开发 | 更新日期: 2023-09-27 18:36:27

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

我的应用程序是Visual Studio .NET 2005中开发的可执行wform应用程序,具有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)

第一个提示是:如果我在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策略"和应用程序要求下(框架 2.0、API 或类似的东西,不能使用非微软的模组/控件/库)

编辑:

  • 将密钥添加到以下位置的解决方案:HKEY_CURRENT_USER''Software''Microsoft''Windows NT''CurrentVersion''AppCompatFlags''Layers WORKSED。

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

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

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

我不知道XP

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

在 vista 上启用 uac 应用程序。

可以执行运行命令的小服务,并且服务进程安装程序必须具有属性帐户:本地系统。

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

它正在Win7和XP上运行。

MSDN 创建 Windows 服务

还有注释:

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