Process.start()在尝试以管理员身份运行时抛出错误

时间:2016-05-02 17:07:22

标签: vb.net administrator start-process

我在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的密码)。

1 个答案:

答案 0 :(得分:1)

很遗憾 你不能这样做 ,这就是为什么......

verb基本上psi.UseShellExecute = False未被识别,这需要psi.UseShellExecute = True。在尝试使用runas作为提升权限时,您正在执行此操作。

在您的情况下,您不会使用verb = runas,请确保已使用正确的权限启动应用程序。

请参阅更多关于提升特权的here,Hans Passant说最好......