2009-07-17 25 views
0

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

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

so..when我创建另一个应用程序,并且希望我的新的应用程序具有MEM检查功能,我只需要引用它,然后我的新应用运行之后,MEM检查将一起发射..

so ..我可以做这些吗?

回答

2

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

您可以创建一个线程来运行一些后台检查过程,挂接到应用程序对象的事件或任何您需要的。

不过请注意,你需要做的不仅仅是添加项目引用到您的装配 - 一个组件只加载到应用程序域时,一些在组装现有代码引用。

+0

嗯.....我可以做的是,即使没有被引用的现有代码,我的程序集只是添加为引用,静态构造函数仍然可以工作吗?...我不认为它会工作.. 无论如何,,我会试试以后..感谢.. – jojo 2009-07-17 07:26:33

+0

如果您的代码从未使用程序集中的任何内容,它将永远不会加载到应用程序域。 CLR在启动时不会自动加载每个引用的程序集,只会根据需要加载所需的程序集。 – Bevan 2009-07-17 08:58:05

0

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

虽然我不确定你可以用应用程序挂钩监视系统内存消耗。不幸的是,你不能在托管代码中编写全局钩子,因为全局钩子需要一个定义良好的入口点(一个DLL导出)。这真的是最适合C++的东西。

0

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

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

编辑:

好吧,首先免责声明,我Quest Software公司(使这个工具,我对堵塞公司)工作。这就是说......

操作系统监控实际上并不像你想像的那样直截了当,诸如内存消耗,进程监控等事情......好吧,不合理。您可能会发现像Spotlight on Windows(前10个许可证的免费软件)会适合您的用途吗?

相关问题