0

我想编写一个 C# 库或引用服务,以便如果应用程序引用我的库,并且当应用程序运行时,我的函数中的函数可以在没有任何调用的情况下运行?

比如我有一个lib,一直在读平台的内存使用情况,当内存达到80%时,我会弹出一个消息给用户,是时候关闭应用程序了。

所以..当我创建另一个应用程序,并希望我的新应用程序具有内存检查功能时,我只需要引用它,然后在我的新应用程序运行后,内存检查将一起触发..

所以..我该怎么做?

4

3 回答 3

2

为您的类创建一个静态构造函数- 此构造函数将运行一次,并且仅在宿主应用程序第一次引用与您的类相关的任何内容时运行。

您可以创建一个线程来运行一些后台检查过程,挂钩到 Application 对象的事件,或者您需要的任何东西。

但是请注意,您需要做的不仅仅是将项目引用添加到您的程序集 - 只有当该程序集中的某些内容被现有代码引用时,程序集才会加载到应用程序域中。

于 2009-07-17T03:55:02.197 回答
0

您正在寻找的术语是“Win32 应用程序挂钩”。这里有一个关于托管钩子注入的不错的介绍:http: //msdn.microsoft.com/en-us/magazine/cc188966.aspx

不过,我不确定您是否可以使用应用程序挂钩来监控系统内存消耗。不幸的是,您不能在托管代码中编写全局挂钩,因为全局挂钩需要一个明确定义的入口点(DLL 导出)。这确实是最适合 C++ 的东西。

于 2009-07-17T03:55:56.687 回答
0

可以在程序集中创建传统的 DLL 导出(通过 ILASM 或现已失效的 Delphi.NET),但不推荐。(搜索反向 p/invoke)

另一种方法是创建一个 C++/CLI 中间 dll 来调用您的托管代码。但老实说,我认为你最好用 C++ 或 Delphi 创建一个本地 DLL。

编辑:

好的,首先免责声明,我为 Quest Software 工作(制造这个工具的公司,我将要插入这个工具)。那就是说...

OS Monitoring is actually not as straight forward as you might think, things like memory consumption, process monitoring etc is...well, pernickety. You may find that somthing like Spotlight on Windows (Freeware for first 10 licences) would suit your purpose ?

于 2009-07-17T04:17:10.707 回答