c# - 如何在域中以模拟用户身份运行提升的命令

标签 c# .net c#-4.0 printing

我们域内有很多客户并未与我们的网络保持持续连接。我们的用户正在使用不同类型的网络打印机(通常由我们提供)的小型(有时断开连接)本地网络上工作。在这个小型网络中,还有一些未加入我们域的人(合作伙伴、雇主……)需要这些打印机。其中一些用户是本地管理员,但大多数不是。

我的目标是(动态)为每台打印机创建一个安装程序,以便用户可以从我们的网络、USB、CD 等运行此安装程序,从而创建本地 tcp/ip 端口,安装打印机驱动程序并安装添加打印机。

我的问题在于获取足够的权限来执行安装。 (1) 如果(并且仅如果!)本地用户是管理员,安装程序应启动提升的应用程序来处理安装。 (2) 如果用户是我们域的成员,但他不是本地管理员,则安装程序应使用我们的策略添加的本地管理员帐户。

我知道如何运行提升的进程来调出 UAC 进行确认,并且我知道如何冒充其他用户..

但是,当在模拟过程中尝试提升命令时,我永远看不到提升确认信息。这是合乎逻辑且正常的。

有什么提示或技巧吗?有人吗?

最佳答案

你知道什么..毕竟这似乎是可能的。我首先使用模拟来触发海拔提示,但不起作用。实际上更简单。

以下是精简的基础知识:

[第一个应用程序]

var str = "%My Administrator Password%";
var pwd = new System.Security.SecureString();
foreach(char c in str) pwd.AppendChar(c);

ProcessStartInfo psi = new ProcessStartInfo();
psi.UseShellExecute = false;
psi.WorkingDirectory = @"C:\path";
psi.FileName = @"C:\path\SecondApp.exe";
psi.UserName = "%My Administrator UserName%";
psi.Domain = "%My Administrator Domain%";
psi.Password = pwd;
psi.Verb = "runas";

var proc = new Process();
proc.StartInfo = psi;
proc.Start();

[SecondApp.exe]

ProcessStartInfo psi = new ProcessStartInfo();
psi.UseShellExecute = true;
psi.WorkingDirectory = @"C:\path";
psi.FileName = @"C:\path\ElevatedApp.exe";
psi.Verb = "runas";

var proc = new Process();
proc.StartInfo = psi;
proc.Start();

对我有用。触发 FirstApp.exe 的简单用户会看到以提升的管理员身份执行的提升提示。

感谢 J. Robbins:http://www.wintellect.com/blogs/jrobbins/elevate-a-process-at-the-command-line-in-vista

关于c# - 如何在域中以模拟用户身份运行提升的命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18875183/

相关文章:

c# - 面向 C# 程序员的高级 Java 主题

c# - 如何在 MouseDown/Move c# 上绘制矩形

c# - UserManager.Create : An exception of type 'System.MissingMethodException' occurred in mscorlib. dll 但未在用户代码中处理

.net - Web.config 中的奇怪警告

javascript - 请谁能帮我将此正则表达式模式从 javascript 转换为 c#

c# - .NET 中的 XML 数据管理

c# - Reflection Get List<> from List<T>(来自通用容器类型的容器类型)

asp.net - 定位 .NET 控件

.net - 如何记录从 Simple.Data ORM for .NET 生成的 SQL 查询

c# - Crystal 报表一直提示输入参数