如何编译将以管理员身份启动exe的程序[重复]

Posted

技术标签:

【中文标题】如何编译将以管理员身份启动exe的程序[重复]【英文标题】:How to compile program that will launch an exe as administrator [duplicate] 【发布时间】:2011-03-17 03:11:49 【问题描述】:

可能重复:Elevating process privilege programatically?

我想在 .NET 中构建一个控制台应用程序,它只运行具有提升权限的另一个程序。这样我就可以将它指向,比如说,Flash 的安装 exe,向用户发送指向我的“runasadmin”exe 的快捷方式,然后用户就可以更新 Flash。

要运行的凭据和文件名将对用户隐藏(在已编译的 exe 中)

这是否安全,当然不是。但是,访问数百个用户的工作站的想法让我们开始寻找替代方案:)

这可行吗?有人有这方面的经验吗?

【问题讨论】:

可能没有 - XP 没有 UAC,我相信 Impersonate API 调用从一开始就需要提升权限。 关门了?瘸。这不是确切重复。就我而言,我并不担心 UAC - 我使用的是 XP,并且不像 Vista 或 Windows 7 中那样存在“以管理员身份运行”的概念 【参考方案1】:

您知道,Microsoft 已经提供了一个命令行实用程序来以不同的用户身份运行程序,包括管理员:http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/runas.mspx?mfr=true

您可以使用适当的命令行参数创建一个执行 RunAs 的快捷方式,然后您的程序将一键执行。

【讨论】:

我很乐意使用它,但您似乎不能在命令中包含密码。关键是我授予管理员访问权限以在没有管理员参与的情况下运行程序,并且不泄露管理员密码(开个玩笑——这不是考虑因素!)【参考方案2】:

尝试使用 Windows API 调用“CreateProcessWithLogonW” - 我在 .Net 中使用过它并取得了很大成功。

【讨论】:

【参考方案3】:

听起来您在公司 IT 部门,在这种情况下,我想您可以创建在用户计算机上具有管理员权限的 AD 帐户。完成后,您可以创建一个 P/Invokes 到 CreateProcessAsUser 的 .NET 应用程序,以在管理员帐户下启动所需的安装过程。

可以在here找到一些关于如何从.NET P/Invoke这个方法的信息

话虽如此,向多用户计算机推出软件是一项常见要求,并且有许多产品可以为您做到这一点。

【讨论】:

【参考方案4】:
            System.Diagnostics.ProcessStartInfo processStartInfo = new System.Diagnostics.ProcessStartInfo("path", "args");
        processStartInfo.Verb = "runas";

        using (System.Diagnostics.Process process = new System.Diagnostics.Process())
        
            process.StartInfo = processStartInfo;
            process.Start();
            process.WaitForExit();
        

【讨论】:

以上是关于如何编译将以管理员身份启动exe的程序[重复]的主要内容,如果未能解决你的问题,请参考以下文章

visual studio中的exe以管理员身份运行

程序启动时如何请求管理员权限?

如何在批处理bat文件中,以管理员的身份运行其他exe安装程序?

从以管理员身份运行的进程以用户身份启动进程

如何在管理模式和最大化窗口中启动.exe?

Delphi 判断exe是否以管理员身份启动