Как остановить запуск программы с помощью С#?

StackOverflow https://stackoverflow.com/questions/146439

  •  02-07-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

Вероятно, вы могли бы сделать это даже в AutoIt!

Вытащите Петцольд и поиграйтесь с окнами...

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

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

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

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

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

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

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

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

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

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

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Параметры выполнения файла изображения] — это ключ, найдите статью MS http://support.microsoft.com/default.aspx?kbid=238788 для получения дополнительной информации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top