Как сделать приложение Windows для одной системы (машины) - PullRequest
1 голос
/ 07 сентября 2010

Я хочу создать .exe для настольного приложения, которое можно использовать только один раз в жизни. Никто не может запустить его дважды.

Ответы [ 5 ]

5 голосов
/ 07 сентября 2010

Вы не можете сделать это надежно.

Вы можете попробовать простые вещи, такие как запись магического ключа в реестре или хранение магического файла где-нибудь, но простые инструменты, такие как Process Monitor покажут ваши магические маркеры всем, кто обладает навыками Google.

Вы можете попытаться удалить .exe, когда он завершается, но если пользователь делает копию до того, как выполнит ваш файл, вы теряете снова.

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

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

Но, в конце концов, если кто-то действительно захочет запустить ваше приложение более одного раза, он поймет, как это сделать.

Какую защиту вы хотите?

1 голос
/ 07 сентября 2010

Удалить себя при выходе?

0 голосов
/ 07 сентября 2010

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

0 голосов
/ 07 сентября 2010

Можно использовать комбинацию вызовов DPAPI (ProtectedData Класс ), чтобы вставить значение в реестр для повторной проверки или альтернативно кодировать значение при первом запуске и проверить результат соответствует машине, на которой вы собираетесь запустить (и выйти, если нет).

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

0 голосов
/ 07 сентября 2010

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

...