Vb.net Process.start()在尝试以管理员身份运行时引发错误

Vb.net Process.start()在尝试以管理员身份运行时引发错误,vb.net,administrator,start-process,Vb.net,Administrator,Start Process,我有一个在vb.net中开发的应用程序,它需要管理员权限。我已经在应用程序清单中设置了level=“requireAdministrator”。我的客户希望此应用程序由本地用户运行,因为他们的组织中存在一些限制。因此,我创建了另一个“启动器”应用程序,它将以加密格式保存管理员凭据,并使用保存的凭据运行“原始”应用程序 如果我使用“管理员”帐户(内置帐户),一切正常。但是,如果我使用手动创建的管理员帐户的凭据,则process.start()行会抛出一个错误“请求的操作需要提升” 我真的无法确定内

我有一个在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的密码)

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

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

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


请查看更多关于提升权限的信息,Hans Passant说这是最好的…

可能的@MaliCMT副本:除此之外,您还可以创建一个后台应用程序,从提升权限开始。然后,你的后台应用程序将使用重定向的输出启动你想要的进程,然后backgound应用程序将自行关闭。现在,您只需从后台应用程序检索ID,或者只需按名称搜索ID,即可找到正确的进程。@zaggler:您是对的。事实上,我将.verb=“runas”作为测试不同可能性的一部分,但在发布时忘记将其从代码中删除。我已经把电话线拔掉了。谢谢你的反馈。不幸的是,你的回答没有回答我的问题。我已经把我的问题说得更清楚了一点。