如何在域中作为模拟用户运行提升的命令

时间:2013-09-18 14:37:27

标签: c# .net c#-4.0 printing

我们的域内有很多客户与我们的网络没有持续关联。我们的用户正在使用不同类型的网络打印机(通常由我们提供)处理小型(有时是断开连接的)本地网络。在这个小型网络中,我们的域名(合作伙伴,雇主......)中也没有人需要这些打印机。其中一些用户是本地管理员,但大多数用户不是。

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

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

我知道如何运行一个提升过程,提出UAC进行确认,我知道如何冒充其他用户..

但是当我试图在模仿时提升命令时,我永远无法看到高程确认。这是合乎逻辑且正常的。

任何提示或技巧?任何人吗?

1 个答案:

答案 0 :(得分:2)

什么'知道......毕竟它似乎是可能的。我首先使用模仿来触发提升提示,但不起作用。实际上它更容易。

以下是精简版基础知识:

[FirstApp]

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.罗宾斯:http://www.wintellect.com/blogs/jrobbins/elevate-a-process-at-the-command-line-in-vista