我们域内有很多客户并未与我们的网络保持持续连接。我们的用户正在使用不同类型的网络打印机(通常由我们提供)的小型(有时断开连接)本地网络上工作。在这个小型网络中,还有一些未加入我们域的人(合作伙伴、雇主……)需要这些打印机。其中一些用户是本地管理员,但大多数不是。
我的目标是(动态)为每台打印机创建一个安装程序,以便用户可以从我们的网络、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/