我有一个与MS-Outlook接口的VB.NET应用程序,为此,它必须在没有ADMIN特权的情况下运行。一切都很好。
问题出现在" LiveUpdate"模块,一个使用ADMIN特权管理器运行的独立应用程序,结束其更新并再次加载主应用程序。使用以下命令执行此加载:
Process.Start(MyApp.exe)
但当" MyApp"加载,它不能再与MS-Outlook接口,后者拒绝该接口发送在不同UAC权限下运行的程序的典型消息。我想当LiveUpdate执行Process.Start时,命令会使用相同的特权(ADMIN)。
事实:
那么,是否有一些方法可以进行" Process.Start"从调用者处丢弃ADMIN权限的应用程序(LiveUpdate)?
此次通话期间用户/密码的使用不是我猜的选项... 谢谢!
答案 0 :(得分:0)
以下是我发现的内容:您可以通过explorer.exe运行升级软件来启动升级过程。除了管理员用户(非用户管理员,系统管理员)之外,此方法应该适用于所有人。我发现了这个信息here。
对于它的代码部分,它看起来像这样:(信用为plutonix;请点击上面的链接)
Dim proc = New Process
proc.StartInfo.UseShellExecute = True
proc.StartInfo.WindowStyle = ProcessWindowStyle.Normal
proc.StartInfo.WorkingDirectory = mypath
If chkAdmin.Checked Then ' run this app as admin
proc.StartInfo.FileName = myApp
proc.StartInfo.WorkingDirectory = mypath
proc.StartInfo.Verb = "runas" ' run "me" as admin
proc.StartInfo.Arguments = ""
Else ' run explorer w/app as arg
' de-elevate new app instance to run de-elevated
proc.StartInfo.FileName = Path.Combine(windir, "explorer.exe")
proc.StartInfo.Verb = "" ' important!
proc.StartInfo.Arguments = myApp ' send the child app name as arg
End If
proc.Start()
我自己没有测试过,但它应该正常工作。 (同样,所有这些归功于用户:plutonix)