4

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

但是,它确实使用 .net 的 webclient 功能来查询 Internet 上的各个站点。

但它不是一个网络应用程序。它不在 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 reg 密钥?

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

--EDIT-- 为 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
4

1 回答 1

1

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

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

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

...

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

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

参考:

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

于 2012-09-10T23:28:06.753 回答