Question

Voici l’idée, je voudrais faire un service? qui cherchera un certain programme à démarrer et le dissuadera à moins que certaines conditions ne soient remplies.

Disons que je veux m'empêcher de jouer pendant la semaine. Donc, si je le lance un jour autre que vendredi / samedi / dimanche, il sera intercepté et annulé. Est-ce possible avec C #?

La chose principale que je cherche est la façon de démarrer un programme, le repos devrait être facile.

Était-ce utile?

La solution

Eh bien, vous pouvez déterminer quels programmes sont en cours d'exécution en recherchant les noms de processus souhaités (GetProcessesByName ()) et en les supprimant.

Process[] processes = Process.GetProcessesByName(processName);
foreach(Process process in processes)
{
   process.Kill();
}

Vous pouvez simplement en avoir une liste que vous ne voulez pas exécuter, faire une vérification de l'heure (ou un critère quelconque à respecter), puis parcourir la liste. J'ai fait quelque chose comme ça une fois pour un test et ça marche assez bien.

Autres conseils

Je ne connais pas C # en particulier ici, mais l’une des raisons pour lesquelles vous pourriez accomplir cela (c’est dangereux) consiste à utiliser les options d’exécution du fichier image ( http://blogs.msdn.com/junfeng/archive/2004/04/28/121871.aspx ) dans le registre. Quel que soit l'exécutable que vous souhaitez intercepter, vous pouvez définir l'option Debugger pour cette option, puis créer une petite application à utiliser avec le débogueur, puis filtrer ces appels. Si vous voulez le laisser fonctionner, démarrez le processus, sinon faites ce que vous voulez. Je n’ai jamais tenté cela, mais il semble que cela pourrait faire ce que vous voulez.

Si vous souhaitez réagir au démarrage du processus puis le fermer, vous pouvez utiliser un ProcessWatcher ( http://weblogs.asp.net/whaggard/archive/2006/02/11/438006.aspx ) et vous abonner à l'événement créé par le processus, puis le fermer. bas si nécessaire. Cependant, il s’agit plus d’une approche réactive que d’une approche proactive comme la première.

Je ne suis pas sûr que vous puissiez le voir démarrer, mais vous pouvez essayer de rechercher le programme dans la liste des fenêtres (était-ce ENUM_WINDOWS? Je ne m'en souviens jamais) et le fermer dès qu'il apparaît .

Vous pouvez probablement même le faire dans AutoIt!

Faites glisser le Petzold et amusez-vous avec Windows ...

MODIFIER: Recherchez dans sysinternals le code source de la liste des processus actifs. Cette opération est effectuée en boucle et vous pouvez intercepter votre programme à son démarrage. Je ne pense pas que le site officiel en ait encore la source, mais il y en aura forcément quelque part ...

Hrm, plutôt que d'intercepter son démarrage, votre service pourrait peut-être saboter l'exécutable (c'est-à-dire bouder avec les autorisations, renommer le fichier EXE, remplacer le fichier EXE par quelque chose qui vous blâme pour votre volonté faible, etc.).

Si cela ne suffit pas, vous pouvez essayer l'une de ces approches:

http://www.codeproject.com/KB/system/win32processusingwmi.aspx

http://msdn.microsoft.com/en-us/magazine /cc188966.aspx

Il y a toujours des crochets. Bien que cela ne soit pas pris en charge dans la bibliothèque .net, vous pouvez toujours envelopper la dll win32. Voici un bel article: http://msdn.microsoft. com / sv-se / magazine / cc188966 (fr-fr) .aspx

C’est une programmation de bas niveau, et si vous voulez que votre code soit portable, je n’utiliserais pas de hooks.

Cette application fera exactement cela Tuer le processus à partir de la lampe orange . Je ne suis pas l'auteur.

Vous n'avez pas nécessairement besoin d'intercepter les programmes de démarrage. Vous pouvez écrire un " responsable du démarrage du programme " application qui lance les programmes pour vous (s’ils figurent sur la liste blanche). Une fois l'application créée, il vous suffit de modifier les raccourcis de votre application pour pointer vers votre responsable de démarrage avec les paramètres appropriés.

Si vous devez simplement désactiver l’application, vous pouvez modifier le registre pour essayer de joindre automatiquement un débogueur à cette application. Si le débogueur n’existe pas, Windows se plaindra et se sauvera.

[Options d'exécution de fichier HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Image] est la clé, recherchez l'article MS http://support.microsoft.com/default.aspx?kbid=238788 pour plus d'informations.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top