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

Register performance counter without lodctr

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

虽然 this question and this question 对问题给出了一些见解,但 none 给出了正确的解决方案。

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

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

lodctr.exe /M:xmlfile.xml

?

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

我认为这是不可能的,至少以一种有记录的方式是不可能的。如果您找到并使用一些未记录的方式,它可能会与某些 OS/service 包或 Windows 的未来版本一起中断。

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

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

请注意 registering/unregistering PC 很少见 activity - 因此 Microsoft 不会费心为您提供一个不错的可调用 Windows API.