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

标签 vb.net administrator start-process

我有一个用 vb.net 开发的应用程序需要管理员权限。我在应用程序 list 中设置了 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(管理员用户的密码)。

最佳答案

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

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

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

更多请看here关于提升特权,Hans Passant 说这是最好的...

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

相关文章:

c++ - 如何可编程检测用户是否具有管理员权限(可以运行安装程序)

java - OS X Catalina 以管理员权限破坏了 osascript 启动

Windows:批处理文件:仅以管理员身份运行

powershell - 通过 startprocess 执行脚本 block

winforms - Button.add_click 中带有变量的启动进程文件路径将无法按预期工作

sql - 使用 ADO.NET 和 AddWithValue() 处理空值

wpf - 右侧的列表框项目对齐按钮

asp.net - 如何在 SQL 中实现 Excel 文件的批处理或组 ID

c# - 是否有基于 .NET 的 CSS 抽象库?