我在vb.net中开发了一个需要管理员特权的应用程序。我在应用程序清单中设置了级别=“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)

附加信息:在这里,我以标准用户(不是管理员)的身份运行此“Launcher”应用程序,该应用程序运行良好,并且确实提高了特权

TbUser.Text =“管理员”和
TbPass.Text = 123(管理员密码)。

但这不是在提升特权的情况下

TbUser.Text =“Adminuser”(也是管理员,它属于同一“Administrators”组),并且
TbPass.Text = 321(管理员用户的密码)。

最佳答案

不幸的是您不能执行此操作,这就是原因...

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

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

请查看更多有关提升特权的here,Hans Passant表示这是最好的...

关于vb.net - 尝试以管理员身份运行时Process.start()引发错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36987825/

10-13 08:12