【问题标题】:How to suppress default browser from opening while VB.NET WebBrowser encounter SSL error (proxies) ?如何在 VB.NET WebBrowser 遇到 SSL 错误(代理)时禁止打开默认浏览器?
【发布时间】:2014-03-24 08:07:21
【问题描述】:

我有一个小问题。我有使用最新安装的 IE 引擎的应用程序。有时它可能会遇到问题,当它发生时,.NET 打开默认浏览器时出现错误(必须启用 SSL 才能与服务器连接,我正在使用代理)。

由于我的应用程序,我想禁止显示任何外部浏览器。

我知道我可以使用 Process.Start 和 stop 来启动浏览器。但是如何识别我的应用程序启动了新进程(是否有任何父进程或树?)

【问题讨论】:

  • 可以使用ManagementScripting库查询任意进程的父进程id
  • 你能告诉我图书馆的确切名称吗?我在 Google 上找不到任何具有此名称的 VB.NET 库(它是第 3 方库吗?我认为 .NET 中有一个内置库)
  • 它实际上是一个 .Net 库(包装 WMI),您可以在名称 System.Management 下找到它

标签: .net vb.net process parent


【解决方案1】:

好的,下面介绍如何通过 WMI 包装器 System.Management 检索任何给定进程的 PPID(父进程 ID)

首先,您显然必须添加对System.Management 的引用。

然后你必须查询有问题的进程:

Dim pid As Int32 = Process.GetCurrentProcess.Id
Dim query As SelectQuery = New SelectQuery(String.Format("select * from Win32_Process where ProcessId = {0}", pid))

接下来,您需要将 查询 提供给 ManagementObjectSearcher 并将结果放入 ManagementObjectCollection

Dim mobjSearcher As ManagementObjectSearcher = New ManagementObjectSearcher(query)
Dim mobjProcesses As ManagementObjectCollection = mobjSearcher.Get()

最后选择第一个(也是唯一的,希望是)进程,它是ParentProcessId

Dim ppid As Int32 = mobjProcesses(0)("ParentProcessId")

不幸的是,ManagementObjectCollection 不知道它正在枚举什么类型的对象,所以你必须查找它并转换它或者对 后期绑定感到满意strong> 在这一点上。


当然,有一种方法可以通过Windows API 实现这一点。这样你就必须从ntdll.dll 调用NtQueryInformationProcess

调用该函数时,您将向它传递一个PROCESS_BASIC_INFORMATION 结构以及进程句柄等。

成功返回后,您会在 stuct 的 IntPtr InheritedFromUniqueProcessId 字段中找到父 PID(您必须将其转换为 Int32)


现在我已经回答了问题“我如何检索进程的父 PID” 我刚刚意识到,尽管它可能会帮助您识别任何已启动的浏览器进程不情愿地被您的应用程序...这很可能不会消除所述应用程序的潜在设计缺陷。

这可能是XY Problem 的答案 X'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    • 2014-09-30
    • 2012-06-11
    • 2011-07-01
    相关资源
    最近更新 更多