Способ остановить запуск программы с помощью C #? - PullRequest
4 голосов
/ 28 сентября 2008

Вот идея, я хотел бы сделать услугу? он будет искать определенную программу и запускать ее, если не будут выполнены определенные условия.

Допустим, у меня есть игра, в которую я не хочу играть в течение недели. Так что, если я запускаю его в любой день, кроме пятницы / субботы / воскресенья, он будет перехватываться и отменяться. Это возможно с C #?

Главное, что я ищу, это как поймать запуск программы, отдых должен быть легким.

Ответы [ 8 ]

6 голосов
/ 28 сентября 2008

Что ж, вы можете определенно определить, какие программы запущены, найдя нужные имена процессов (GetProcessesByName ()) и убив их.

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

Вы можете просто получить список из них, которые вы не хотите запускать, выполнить проверку времени (или какие-либо критерии, которые должны были быть выполнены), а затем просмотреть список. Я сделал что-то подобное один раз для теста, и это работает достаточно хорошо.

3 голосов
/ 28 сентября 2008

Я не знаю, в частности, о C #, но одна из причин, по которой вы могли бы сделать это (я буду опасным способом), заключается в использовании параметров выполнения файла изображения (http://blogs.msdn.com/junfeng/archive/2004/04/28/121871.aspx) в реестре). Для любого исполняемого файла, который вы хотите перехватить, вы можете установить для него параметр Debugger, а затем создать небольшое приложение, которое будет использоваться в отладчике, а затем по существу отфильтровать эти вызовы. Если вы хотите разрешить его запуск, запустите процесс. в противном случае делай, что хочешь. Я никогда не пытался сделать это, но, похоже, он мог делать то, что ты хочешь.

Или, если вы хотите отреагировать на запуск процесса и затем закрыть его, вы можете использовать ProcessWatcher (http://weblogs.asp.net/whaggard/archive/2006/02/11/438006.aspx)) и подписаться на событие, созданное процессом, а затем закрыть его, если необходимо. Однако это более реактивный подход вместо того, чтобы упреждающий подход, как первый.

0 голосов
/ 07 января 2010

Если вам просто нужно отключить приложение, вы можете отредактировать реестр, чтобы попытаться автоматически подключить отладчик к этому приложению, если отладчик не существует, Windows выдаст жалобу и выручит.

[HKEY_LOCAL_MACHINE \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ Windows NT \ CurrentVersion \ Параметры выполнения файла изображения] - это ключ, для получения дополнительной информации обратитесь к статье MS http://support.microsoft.com/default.aspx?kbid=238788.

0 голосов
/ 29 сентября 2008

Вам не обязательно перехватывать программы запуска. Вы можете написать приложение «Диспетчер запуска программ», которое запускает программы для вас (если они находятся в белом списке). После того, как вы напишите приложение, все, что вам нужно сделать, это изменить ярлыки приложения, чтобы они указывали на ваш менеджер запуска с правильными параметрами.

0 голосов
/ 29 сентября 2008

Это приложение сделает именно это Процесс убийства из оранжевой лампы
Я не автор.

0 голосов
/ 28 сентября 2008

Всегда есть крючки. Хотя в библиотеке .net его нет, вы всегда можете обернуть Win32 DLL. Вот хорошая статья: http://msdn.microsoft.com/sv-se/magazine/cc188966(en-us).aspx

Это низкоуровневое программирование, и если вы хотите, чтобы ваш код был переносимым, я бы не использовал хуки.

0 голосов
/ 28 сентября 2008

Хм, вместо того, чтобы перехватывать его запуск, возможно, ваша служба может каким-то образом саботировать исполняемый файл (то есть копаться в разрешениях, переименовывать EXE, заменять EXE чем-то, что ругает вас за слабость и т. Д.)

Если этого недостаточно, вы можете попробовать один из следующих подходов:

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

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

0 голосов
/ 28 сентября 2008

Я не уверен, что вы можете перехватить его при запуске, но вы можете попытаться найти программу в списке окон (была ли это ENUM_WINDOWS? Я никогда не смогу вспомнить) и закрыть ее, как только она появится .

Возможно, вы даже можете сделать это в AutoIt!

Вытащи Petzold и повеселись с окнами ...

РЕДАКТИРОВАТЬ: Проверьте sysinternals для источника о том, как список активных процессов - сделать это в цикле, и вы можете поймать вашу программу при запуске. Я не думаю, что на официальном сайте все еще есть источник, но он обязательно где-то там ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...