3

我有一个在 vb.net 中开发的应用程序,它需要管理员权限。我在应用程序清单中设置了 level = "requireAdministrator"。由于组织中的一些限制,我的客户希望此应用程序由本地用户运行。所以我创建了另一个“启动器”应用程序,它实际上将以加密格式保存管理员凭据,并将使用保存的凭据来运行“原始”应用程序。

如果我使用“管理员”帐户(内置帐户),一切正常。但是如果我使用手动创建的管理员帐户的凭据 - process.start () 行会抛出错误“请求的操作需要提升”我真的无法识别内置管理员和手动创建之间的区别管理员帐户。我确认两个用户(内置的和手动创建的)都是管理员和家庭用户的成员。我尝试了所有可能性,通过创建具有不同用户组甚至不同操作系统(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”(也是属于同一“Administrators”组的管理员)和 TbPass.Text = 321(Adminuser 的密码)。

4

1 回答 1

1

不幸的是,你不能这样做,这就是为什么......

基本上verb不承认什么时候psi.UseShellExecute = False,这个就需要了psi.UseShellExecute = True。您在尝试runas用作提升权限时正在执行此操作。

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

在此处查看有关提升特权的更多信息,Hans Passant 说这是最好的...

于 2016-05-02T18:48:12.063 回答