1

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

我的应用程序是在 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 提示)获取权限

4

2 回答 2

2

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

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

在 vista 上启用 uac 应用程序

于 2012-06-08T14:00:09.163 回答
0

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

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

它适用于 Win7 和 XP

MSDN 创建 Windows 服务

并且注意:

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

于 2012-06-08T19:17:25.470 回答