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

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
0
5 885
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

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

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

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

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

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

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

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

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

Я не знаю, в частности, о 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) и подписаться на событие, созданное процессом, а затем при необходимости закрыть его. Однако это скорее реактивный подход, чем проактивный подход, подобный первому.

Ответ принят как подходящий

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

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

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

Звучит как хороший вариант; пусть он запускается каждые пять минут или около того ... достаточно, чтобы позволить вам войти в него, только для того, чтобы он внезапно умер прямо из-под вас. Достаточно раздражает, чтобы преподать урок. :)

Ryan Lundy 28.09.2008 23:11

Особенно, если вы близки к завершению уровня или достижению высоких результатов. :) Однозначно круто.

itsmatt 28.09.2008 23:18

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

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

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

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

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

Ключом является [HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Image File Execution Options], дополнительную информацию можно найти в статье MS http://support.microsoft.com/default.aspx?kbid=238788.

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