为什么 VB.net 4.0 框架应用程序(标准 EXE)会尝试写入 HKLM 中的 ASP.net 注册表项?

Dar*_*inH 5 vb.net .net-4.0

我编写了一个 .net 4.0 框架应用程序(在 VB.net 中)。这确实是一件简单的事情,基本上只是一个带有一些花哨功能的屏幕保护程序。

然而,它确实使用.net 的网络客户端功能来查询互联网上的各个站点。

但它不是一个网络应用程序。它不在 ASP 下运行,或者据我所知,与 ASP.net 没有任何关系。

但是,当我在安装了 Comodo 防火墙的计算机上运行它时,我收到来自 Comodo 的警告弹出窗口,表明

1)程序正在尝试访问互联网(这是一件好事,这里没问题)。

2)该程序正在尝试创建注册表项,例如:hklm\system\controlset001\services\asp.net_4.0.30319\names{somelonghexvalue}

现在,我一直遵循这样的规则:基本上 HKLM 中唯一混乱的东西是安装程序,但这里这个应用程序试图在那里做一些事情。它来自 .net 框架,我的应用程序根本不从注册表请求任何密钥。

我猜测框架已被授予执行此操作的权限,即使当前用户无权在 HKLM 中创建密钥(因为我没有收到任何错误,即使应用程序在权限很少的凭据下运行) 。

所以,我的问题是,有人以前遇到过这个问题,或者知道为什么框架在运行与 ASP.net 没有任何关系的标准 EXE 时会创建 ASP.Net 注册表项?

我确实提出了这个问题, ASP.NET 4 注册表更改 ,但这种情况下的提问者实际上是在处理 ASP.net 应用程序。在这种情况下,我不是。

--编辑--为 Clara 添加了用于执行 HTTP Get 的代码

Dim request As HttpWebRequest = DirectCast(WebRequest.Create(requestUri), HttpWebRequest)
Dim resultPage As String = String.Empty
Using httpWebResponse As HttpWebResponse = DirectCast(request.GetResponse(), HttpWebResponse)
    Using responseStream As Stream = httpWebResponse.GetResponseStream()
        Using reader As New StreamReader(responseStream)
            resultPage = reader.ReadToEnd()
        End Using
    End Using
End Using
Run Code Online (Sandbox Code Playgroud)

jCo*_*son 2

由于某种原因,它正在更新 ASP.NET 性能计数器,尽管我不确定原因。

\n\n

该注册表项存储 ASP.NET 的命名管道名称:

\n\n
\n

管道名称。每个正在运行的工作进程一个。请参阅\xe2\x80\x9c运行时\n会发生什么?\xe2\x80\x9d。此子密钥仅出现在 32 位版本密钥上。

\n\n

...

\n\n

在运行时期间,每当运行 Web 应用程序且工作进程启动时,它都会加载 webengine.dll(或 .Net 4.0 中的 webengine4.dll)。除其他功能外,该库还将在此过程中初始化性能计数器本地存储。它还将创建\n 命名管道,客户端将能够连接到该命名管道并从中读取\n 计数器数据。管道的名称存储在 HKLM\\SYSTEM\\CurrentControlSet\\services\\ASP.NET_x.x.xxxxx\\Names\n 注册表项中,以便客户端可以找到它。

\n\n

命名管道的处理是异步的。该库使用来自 CLR 的\n IO 完成线程,该线程每次都会被唤醒

\n
\n\n

参考:

\n\n

ASP.NET 内部 - 性能计数器实现细节

\n