2

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

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

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

我知道如何运行提升 UAC 以进行确认的进程,并且我知道如何冒充另一个用户..

但是,当试图在模拟时提升命令时,我永远不会看到提升确认..这是合乎逻辑和正常的。

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

4

1 回答 1

2

What'ya know..这似乎是可能的。我首先使用了一个模拟,该模拟触发了无效的海拔提示。它实际上更容易。

以下是精简的基础知识:

[第一应用]

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();

[第二应用程序.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

于 2013-09-19T13:32:35.640 回答