【问题标题】:Process.start () throwing error while trying to run as administratorProcess.start() 尝试以管理员身份运行时抛出错误
【发布时间】:2016-08-27 12:51:55
【问题描述】:

我有一个在 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(管理员用户的密码)。

【问题讨论】:

标签: vb.net administrator start-process


【解决方案1】:

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

psi.UseShellExecute = False 时基本上无法识别verb,这需要psi.UseShellExecute = True。您在尝试使用 runas 作为提升权限时这样做。

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

请参阅here 更多关于提升权限的信息,Hans Passant 说这是最好的...

【讨论】:

  • @MaliCMT :除此之外,您还可以创建一个以提升权限启动的后台应用程序。然后,您的后台应用程序将使用重定向的输出启动您想要的进程,然后后台应用程序将自行关闭。现在您只需通过从后台应用程序中检索 ID 或仅通过名称搜索即可找到正确的进程。
  • @zaggler:你是对的。事实上,我将 .verb = "runas" 作为测试不同可能性的一部分,并在发布时忘记将其从代码中删除。我已经删除了这条线。感谢您的反馈意见。不幸的是,您的回答没有回答我的问题。我已经把我的问题说得更清楚了。
猜你喜欢
  • 1970-01-01
  • 2015-07-31
  • 1970-01-01
  • 2012-11-22
  • 1970-01-01
  • 2016-09-20
  • 2010-11-26
  • 2012-05-28
  • 2011-03-24
相关资源
最近更新 更多