2014-09-02 6 views
0

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

Таким образом, я действительно ХОЧУ хранить что-то в полутвердости, чтобы найти и изменить местоположение, глобальное для машины (HKEY_LOCAL_MACHINE), а не конкретный пользователь этой машины (я не могу использовать папку пользователей). Все остальные параметры приложения сохраняются либо для каждого пользователя, либо для каждой машины с помощью exe или в папках пользователей, поэтому именно эти два ключа хранятся в реестре, которые я бы хотел прекратить.

Есть ли способ сделать то, что я хочу, не используя реестр?

Не то, чтобы это имело значение, но код был .Net (один модуль - C# другой VB).

+0

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

+0

Обычным соглашением является создание своего рода ключа на основе MAC-адреса основного интерфейса Ethernet-устройства. Такой ключ может храниться рядом с исполняемым файлом или в любом другом удобном месте; если он скопирован на другую машину, это не сработает. –

+0

Гарри, мне лично не нравится привязывать вещи к конфигурациям оборудования, поскольку он не позволяет вам менять свое оборудование, не нарушая его. – Benji

ответ

2

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

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

Заканчивать константы SpecialFolder перечисления для использования с функцией Environment.GetFolderPath

папка CommonApplicationData не особенно хорошо известно, и это по крайней мере законно. для хранения данных для каждого приложения. Это будет разрешено в разных местах на диске в зависимости от вашей версии Windows.

ДОБАВЛЕНО

Насколько я помню, нет администратора собств. необходимо - в конце концов, это папка данных общих приложений - я использовал ее раньше, чем admin priv. но кто знает, что происходит под окном 9 и т. д. Обязательно поместите его в подпапку вместо самой папки CommonApplicationData.

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

+0

Гэри, я не слишком обеспокоен тем, что это становится популярным, поскольку это для рынка ниши с инженерным упором. Я также не слишком беспокоюсь о том, чтобы сделать его супер безопасным. Папка CommonApplicationData выглядит очень многообещающей, и я обязательно ее проверю. Вы знаете, если для этого требуются права администратора? – Benji

+0

добавлено в ответ –

+0

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

0

Вы можете создать своего рода «зашифрованный» ini/xml-файл в exe-Folder.
Этот файл может быть создан при запуске первой программы (или когда пользователь регистрируется), включая информацию об установке и maschine.
(Копирование файла в любом месте файловой системы, не является хорошей идеей.)

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

Таким образом, нелегко найти местоположение (помимо User-Folder и Win-Registry), которое существует (постоянно) для всех Win-Computers и может использоваться для записи файлов (без прав администратора).

Возможно, вы можете использовать C: \ Users \ All Users (или C: \ Users \ Public (что я не рекомендую))?

+0

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

+0

@AdrianMcCarthy: в этом контексте я бы не подумал, что это проблема. Вероятно, данные записываются только во время установки. –

+0

Бен, это то, что я делаю по существу. Я просто использую GUID как часть ключа шифрования. GUID достигается при первом запуске программы и сохраняется в реестре. – Benji