windows - 在没有 lodctr 的情况下注册性能计数器

标签 windows winapi visual-c++ performancecounter

我正在寻找一种无需使用 lodctr 可执行文件即可注册到基于 XML 的性能计数器的方法。

同时 this questionthis question对问题给出了一些见解,但没有人给出适当的解决方案。

函数 LoadPerfCounterTextStrings 似乎可以解决问题,但似乎没有将 XML 作为输入(即 lodctr 命令的 /M 参数)。该函数无论如何都会调用 lodctr 命令,但将使程序员免于以编程方式调用 lodctr.exe

是否有一种方法可以调用此函数(或任何其他函数),其行为就像:

lodctr.exe /M:xmlfile.xml

?

只是一个附加信息,LoadPerfCounterTextStrings 在 Windows XP 中可用,但是,新的 API (perflib 2) 仅在 Vista 之后可用。我正在使用 V2。

最佳答案

我认为这是不可能的,至少以一种有记录的方式是不可能的。如果您找到并使用一些未记录的方式,它可能会破坏某些操作系统/服务包或 future 版本的 Windows。

最好的办法是调用 LODCTRUNLODCTR 在您的进程中安装/注册性能计数器。由于这些是命令行工具,它们可能会显示一个命令(黑色)控制台窗口。您可以使用管道隐藏输入/输出重定向,这样控制台窗口就不会出现。

请注意,这些工具不会占用太多时间或资源,因此从您的进程中调用这些 EXE 不会占用太多时间(用户不会注意到,甚至无法轻易弄清楚)使用一些过程监控工具)。

请注意,注册/取消注册 PC 是一项罕见的事件 - 因此 Microsoft 不会为您提供一个很好的可调用 Windows API。

关于windows - 在没有 lodctr 的情况下注册性能计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44450991/

相关文章:

windows - 在 Windows 中,每个进程和每台机器可以使用多少个同步对象?

c++ - CertGetCertificateChain 带有支持的内存存储和证书信任列表

c++ - 用c++写一个对数函数

python - Visual Studio 更新到 15.0 后出现扭曲安装问题

c# - 为什么我无法调试我的 ASP.NET Web 应用程序

c# - 调用 Windows 资源管理器外壳扩展

c++ - 自动关闭 MessageBox

c++ - C++ 应用程序中的 Azure 通知中心?

c# - 获取Windows 8自动颜色主题的激活颜色

c++ - WinApi 相当于 .NET KeyPreview