2009-07-17 5 views
0

je veux écrire un C# lib, ou un service de référence, de sorte que si une référence d'application mon lib, et quand l'application s'exécute, la fonction dans ma fonction peut être exécutée sans invoqué? Par exemple, j'ai obtenu une lib, continuez à lire l'utilisation de la mémoire de la plate-forme, lorsque la mémoire était jusqu'à 80%, j'apparaît un message à l'utilisateur, il est temps de fermer l'application.Comment écrire une lib en C#, la lib peut être exécutée sans invocation?

so..when je crée une autre application, et que ma nouvelle application a la fonction de vérification de mem, j'ai juste besoin de référencer puis après ma nouvelle exécution de l'application, le contrôle mem sera tiré ensemble ..

alors ... comment puis-je faire ces?

Répondre

2

Créez un static constructor pour votre classe - ce constructeur sera exécuté une fois, et une seule fois, la première fois que l'application hôte référencera tout ce qui concerne votre classe.

Vous pouvez créer un thread pour exécuter un processus de vérification des antécédents, vous connecter à un événement de l'objet Application ou ce dont vous avez besoin. Notez cependant que vous devrez faire plus que simplement ajouter une référence de projet à votre assembly - un assembly est chargé uniquement dans un App Domain lorsqu'un élément de cet assembly est référencé par le code existant.

+0

hmm ..... ce que je peux faire est que, même rien n'est référencé par le code existant, mon assemblage vient juste d'ajouter une référence, le constructeur statique peut-il encore fonctionner? ... je ne pense pas qu'il le fera travail .. de toute façon ,, je vais l'essayer plus tard .. merci .. – jojo

+0

Si votre code n'utilise jamais rien de l'assemblée, il ne sera jamais chargé dans le domaine App. Le CLR ne charge pas automatiquement chaque assembly référencé au démarrage, il charge uniquement les assemblys nécessaires, selon les besoins. – Bevan

0

Le terme que vous cherchez est "Win32 application hook". Il ya une introduction décente à l'injection de crochet géré ici: http://msdn.microsoft.com/en-us/magazine/cc188966.aspx

Je ne suis pas sûr que vous pouvez surveiller la consommation de mémoire système avec un crochet d'application, cependant. Et malheureusement, vous ne pouvez pas écrire un hook global dans le code managé car les hooks globaux requièrent un point d'entrée bien défini (une exportation DLL). C'est vraiment quelque chose de mieux adapté pour C++.

0

Il est possible de créer des exportations de DLL traditionnelles dans un assemblage (via ILASM ou Delphi.NET maintenant disparu) mais pas vraiment recommandé. (recherche de reverse p/invoke)

Une autre approche consiste à créer une DLL intermédiaire C++/CLI pour appeler votre code managé. Mais pour être tout à fait honnête, je pense qu'il vaut mieux créer une DLL native avec C++ ou Delphi.

Edit:

Ok, tout d'abord un avertissement, je travaille pour Quest Software (la société qui fait de cet outil que je suis sur le point de brancher). Cela dit ...

OS Surveillance n'est pas aussi simple que vous pourriez le penser, des choses comme la consommation de mémoire, la surveillance des processus, etc est ... bien, pernickety. Vous pouvez trouver que quelque chose comme Spotlight on Windows (Freeware pour les 10 premières licences) conviendrait à votre objectif?

+0

hmm .... puis-je faire en C# ???? En fait, l'application est en cours d'exécution sur le serveur, ma tâche est de surveiller le serveur au moment de l'exécution, .... hmm .... – jojo

Questions connexes