我在vb.net中开发了一个需要管理员权限的应用程序。我在应用程序清单中设置了level =“requireAdministrator”。由于组织中的某些限制,我的客户希望此应用程序由本地用户运行。因此,我创建了另一个“启动器”应用程序,该应用程序实际上将以加密格式保存管理员凭据,并将使用保存的凭据运行“原始”应用程序。
如果我使用“管理员”帐户(内置帐户),一切正常。但是,如果我使用手动创建的管理员帐户的凭据 - process.start()行会抛出错误“请求的操作需要提升” 我真的无法识别内置管理员和手动创建的管理员帐户之间的区别。我确认用户(内置和手动创建)都是Administrators和HomeUsers的成员。我尝试了所有可能性,通过创建具有不同用户组的不同用户,甚至使用不同的操作系统(Windows 7和Windows 10 - 32位和64位版本) - 但是,所有这些都以与上述相同的方式工作。我的代码中有什么必须改变的吗?
Dim psi As New System.Diagnostics.ProcessStartInfo()
psi.FileName = (AppToStart)
psi.RedirectStandardError = True
psi.RedirectStandardOutput = True
psi.CreateNoWindow = True
psi.UseShellExecute = False
psi.UserName = TbUser.Text
psi.Password = ConvertToSecureString(TbPass.Text)
psi.Domain = ""
Dim p As Process = Process.Start(psi)
附加信息:我在这里运行这个'启动器'应用程序作为标准用户(而非管理员),应用程序运行良好,如果
,它确实提升了权限TbUser.Text =“管理员”和 TbPass.Text = 123(管理员密码)。
但如果
,这不会提升特权TbUser.Text =“Adminuser”(也是管理员,属于同一个“管理员”组) TbPass.Text = 321(Adminuser的密码)。
答案 0 :(得分:1)
很遗憾 你不能这样做 ,这就是为什么......
verb
基本上psi.UseShellExecute = False
未被识别,这需要psi.UseShellExecute = True
。在尝试使用runas
作为提升权限时,您正在执行此操作。
在您的情况下,您不会使用verb = runas
,请确保已使用正确的权限启动应用程序。
请参阅更多关于提升特权的here,Hans Passant说最好......