如何在C#中编写一个lib,lib可以在没有任何调用的情况下运行吗?

时间:2009-07-17 03:48:37

标签: c# reference invoke

我想写一个C#lib或参考服务, 因此,如果应用程序引用我的lib,并且应用程序运行时, 我的函数中的函数可以在没有任何调用的情况下运行吗?

例如,我有一个lib,继续阅读平台的内存使用情况, 当内存高达80%时,我向用户弹出一条消息,是时候关闭应用程序了。

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

所以..我可以这样做吗?

3 个答案:

答案 0 :(得分:2)

为您的类创建一个static constructor - 这个构造函数将在主机应用程序第一次引用与您的类相关的任何内容时运行一次,并且只运行一次。

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

另一种方法是创建一个C ++ / CLI中间dll来调用托管代码。但是说实话,我认为你只需要用C ++或Delphi创建一个原生DLL就可以了。

编辑:

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

操作系统监控实际上并不像您想象的那样直接,内存消耗,过程监控等等......好吧,不安全。您可能会发现像Spotlight on Windows这样的东西(前10个许可证的免费软件)适合您的目的吗?