从提升的应用程序

时间:2015-10-06 17:32:15

标签: vb.net process outlook

我有一个与MS-Outlook接口的VB.NET应用程序,为此,它必须在没有ADMIN特权的情况下运行。一切都很好。

问题出现在" LiveUpdate"模块,一个使用ADMIN特权管理器运行的独立应用程序,结束其更新并再次加载主应用程序。使用以下命令执行此加载:

 Process.Start(MyApp.exe)

但当" MyApp"加载,它不能再与MS-Outlook接口,后者拒绝该接口发送在不同UAC权限下运行的程序的典型消息。我想当LiveUpdate执行Process.Start时,命令会使用相同的特权(ADMIN)。

事实:

  1. Liveupdate必须在ADMIN中运行,但MyApp必须以NORMAL方式运行。
  2. 两者都有自己的MANIFEST,但似乎上面的调用绕过了MyApp的清单 - 它被设置为"作为Invoke"作为默认值。
  3. 如果我关闭MyApp并再次手动运行,一切正常。
  4. 有些客户端有USER / PASSWORD,有些客户端没有它(Windows自动加载,没有用户/密码对话框)。
    5.该应用程序在Windows Vista,7,8,8.1和10中运行。
  5. 那么,是否有一些方法可以进行" Process.Start"从调用者处丢弃ADMIN权限的应用程序(LiveUpdate)?

    此次通话期间用户/密码的使用不是我猜的选项... 谢谢!

1 个答案:

答案 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