2009-07-01 3 views
4

У меня есть задание, и оно имеет (среди прочих) два требования:Как сделать мою программу не запущенной на других компьютерах?

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

Я использую VS9 (2008) express, я думаю, что смогу сделать часть установщика, но я не уверен, как сделать часть «безопасности». Мне не нужно тяжело взломать безопасность, просто немое состояние, которое заставит большинство пользователей копировать файлы на другой компьютер. (Как проверка MAC-адреса).

Любые идеи?

EDIT:
Я хотел бы проверить МАС-адрес, но я хочу программу доработан во время установки. Это означает, что после установки я не могу переместить программу на другую машину. Это также не должно быть очень умным или трудным состоянием, просто минимальным. Я просто не знаю, как это сделать при установке.

EDIT:
Это грустно, что я не имею полного VS, то я был бы в состоянии сделать это легко.

+1

Проверка MAC-адреса звучит как хороший старт. –

+2

Вы пытаетесь предотвратить xcopy папки установки вашей программы или пытаетесь помешать кому-либо запустить установщик на новой машине? – NotMe

+0

как это сделать - как запустить код в программе установки? – Nefzen

ответ

8

Если вы ищете какой-то способ маркировать первый компьютер как «авторизованный» компьютер, вам потребуется внешняя служба, с которой вы можете попросить разрешения на запуск.

Первым, кто попросит разрешения, будет разрешено, остальное будет предотвращено.

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

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

[Редактировать] Этот подход полезен, когда вы беспокоитесь о копиях монтажника распространяется также. Вы указали, что его нормально устанавливать на несколько машин, поэтому в этом случае подход MasterMind превосходит. Она будет работать, и не требует 3-го сервера партии

[Edit 2] Если вы ищете информацию о том, как создавать пользовательские установки, попробуйте here

+0

наиболее полезным, однако у меня есть версия VS express. бах. – Nefzen

6

Прежде всего, придумайте некоторую функцию для создания уникальной сигнатуры ПК, например Windows для активации.

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

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

ADDED: Если вам это не очень сложно, вы можете выбрать несколько уникальных значений, таких как MAC-адрес, который вы указали, возможно, серийный номер жесткого диска, серийный номер материнской платы, объединить их в одну строку и сгенерировать хэш из него.

Этот подход позволит использовать неограниченное количество копий (но каждая установка будет работать только на одной машине, где она была установлена). Если вы придерживаетесь идентификации с помощью аппаратного обеспечения (или ключа продукта операционной системы OS), то приложение может работать в разных установках ОС на одном компьютере.

Эта стратегия, однако, подразумевает, что вы контролируете все установки (или выполняете их самостоятельно) или абсолютно доверяете своему клиенту не устанавливать дополнительные копии в другом месте или не распространять ваш установщик. Если вам нужна такая защита, тогда вам следует подумать о активации продукта. Это может быть довольно сложно, если вы сделаете это сами. Однако есть сторонние продукты, которые помогут вам. Некоторые из них предлагают услуги по активации продукта: Google: activation service

+0

не могут ли они просто скопировать файл? – Nefzen

+2

@ Неверно, если файл уникален для компьютера (т. Е. Сгенерирован с использованием аппаратных данных), который не будет соответствовать компьютеру, на который он скопирован. –

+1

Подпись должна отличаться для каждого ПК (уникальная). При копировании проверка завершится неудачно, поскольку сгенерированная подпись отличается от сгенерированной сигнатуры в файле. Сложная часть заключается в создании уникальной подписи. – Burkhard

0

Мне нравится идея проверка MAC-адреса.

Я также видел ключ продукта/интерактивные комбинации активации, когда вы вводите ключ продукта, и программное обеспечение связывается с веб-службой, которая регистрирует ключ продукта и № установки.

5

Как только у вас есть приличный отпечаток пальца, все остальное легко. Лично я бы взял что-то вроде MAC-адреса и идентификатора продукта Windows (в HKLM \ Software \ Microsoft \ Windows \ CurrentVersion \ ProductId) и использовал алгоритм хэширования, чтобы получить что-то разумно неясное.

редактировать:

Вот вопрос, который показывает вам, как получить MAC-адрес в виде строки: Read MAC Address from network adapter in .NET

Затем захватить идентификатор окна продукта (в случае, если они не имеют сетевой адаптер) из указанного раздела реестра. Объедините обе строки и сделайте GetHashCode() (или используйте свой любимый алгоритм хеширования) в результате. Это простой способ получить UID для компьютера.

Запись хэша в файл или в запись реестра, когда ваш установщик выполняет и проверяет его при запуске вашей программы.

2

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

  • код продукта для Windows
  • Объем Серийный номер C: диск
  • MAC-адрес интерфейса локальных сетей

И если только один из этих изменений, но остальные совпадают, обновлять, что один значение в реестре и продолжать работать нормально. Жесткие диски заменяются (регулярно), Windows обновляется (иногда), адаптеры Ethernet заменяются (редко, но это происходит). Это может быть очень неприятно, когда старое программное обеспечение перестает работать из-за этого.

+0

+1 для рассмотрения технического обслуживания и долгосрочного использования программного обеспечения –

+2

Goog указывает, но, пожалуйста, не делайте ничего жесткого кода на C-диске. Не у каждой системы есть одна. Моя текущая машина начинается с диска H :. Большие программные пакеты прекрасно справляются с этим, но это, в основном, небольшие условно-бесплатные программы, которые обычно дергают штаны, когда они не могут делать все, что они пытаются сделать на C :. –

0

Это не самый безопасный вариант или что-нибудь, но ты сказал, что не надо быть умным ...

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

Как:

myProgram.Properties.Settings.Default.Machine = System.Environment.MachineName; 
myProgram.Properties.Settings.Default.Save(); 

затем проверить, что при запуске:

if (System.Environment.MachineName != myProgram.Properties.Settings.Default.Machine) 
{ 
    MessageBox.Show("Can't run on this computer"); 
    this.Close(); 
} 
2

Bare минимального ответа, предполагая, что единственное требование в том, что программное обеспечение должно работать, если установить с помощью инсталлятора, и выиграл» t запустить, если скопирован на другой компьютер:

Напишите простой ключ в реестр. Скорее всего, номер версии вашего продукта, если они копируют более новую версию на компьютер, у нее есть другой номер для проверки.

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

Для упаковочных установок мне очень нравится использовать NSIS, который имеет простые способы записи в реестр.

+0

+1 для полезной информации о развертывании –

+0

+1 для обеспечения простейшего, разумного ответа. – Brian

-2

-1 для привязки к устаревшей политике ограничения лицензий, которая является плохой практикой в ​​целом. Аппаратные ключи и «обнаружение устройств» - это СО 1990.

Люди владеют несколькими компьютерами. Они покупают новые компьютеры. Они модернизируют свои компьютеры. Компьютеры ломаются, что приводит к замене материнских плат или сетевых карт.

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

И каждый раз, когда вы это делаете, ваши накладные расходы увеличиваются, скорее всего, больше, чем фактическая стоимость лицензии.

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

Одним из креативных решений является кэширование пользовательских настроек на вашем сервере, с их серийным номером и их синхронизация каждый раз, когда приложение запускается и подключается к сети.

Это позволит пользователю установить приложение, скажем, как на ноутбук, так и на рабочий стол, и фактически станет добавлением стоимости для клиентов, поскольку их настройки синхронизируются между устройствами.

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

+0

-1: Это школьный проект, и это его требования. –

+0

@richard: С практической точки зрения, позволяя запускать некоторые типы программ после их перемещения, это плохая идея, даже если это не делается по причинам лицензирования. Конечно, они, как правило, просто терпят крах или иным образом терпят неудачу с запутанными ошибками, когда их информация о конфигурации отсутствует, но фактическое обнаружение и предоставление сообщения об ошибке было бы идеальным. @SnOrfus: -1, То же самое. – Brian

-1

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

Смежные вопросы