2013-07-12 3 views
2

Я пытаюсь внедрить функцию в программное обеспечение нашей команды, с помощью которой пользователь не сможет использовать бесплатную версию программного обеспечения за определенный период времени. Я видел особенность в каком-то программном обеспечении, в котором, если вы попытаетесь удалить его после окончания пробного периода, а затем переустановите его, будет отказано в доступе. Я хочу также представить эту функцию.
1) Как узнать, что программное обеспечение было предварительно установлено на конкретном компьютере. Я попытался найти это, и я узнал, что редактор реестра окон делает запись обо всем установленном программном обеспечении и имеет свою запись даже после его удаления. Может ли редактор реестра помочь мне в разработке этой функции. Если да, можете ли вы рассказать мне, как написать код на C++, с помощью которого я могу прочитать редактор реестра.
2) Есть ли какая-то другая особенность на вашем компьютере, которая уникальна для него, как MAC-адрес, который я могу сделать с помощью кода на C++.
Пробный период кодирования в программном обеспечении

+0

Это может быть интересно, если вы смотрите на такие вещи: http://sigpipe.macromates.com/2004/09/05/using-openssl-for-license-keys/ – Will

+1

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

+0

JeffRSon: «Кроме того, доступ к реестру можно просто отслеживать, а эти ключи удалять». Простое решение: смените системное время на 2099 год. Установите программное обеспечение. Измените системное время назад. – SigTerm

ответ

-2

* вы можете использовать приведенный ниже пример, как предложение *

HKEY hKey; 
LONG lRes = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Perl", 0, KEY_READ, &hKey); 
bool bExistsAndSuccess (lRes == ERROR_SUCCESS); 
bool bDoesNotExistsSpecifically (lRes == ERROR_FILE_NOT_FOUND); 
std::wstring strValueOfBinDir; 
std::wstring strKeyDefaultValue; 
GetStringRegKey(hKey, L"BinDir", strValueOfBinDir, L"bad"); 
GetStringRegKey(hKey, L"", strKeyDefaultValue, L"bad"); 

LONG GetDWORDRegKey(HKEY hKey, const std::wstring &strValueName, DWORD &nValue, DWORD nDefaultValue) 
{ 
    nValue = nDefaultValue; 
    DWORD dwBufferSize(sizeof(DWORD)); 
    DWORD nResult(0); 
    LONG nError = ::RegQueryValueExW(hKey, 
     strValueName.c_str(), 
     0, 
     NULL, 
     reinterpret_cast<LPBYTE>(&nResult), 
     &dwBufferSize); 
    if (ERROR_SUCCESS == nError) 
    { 
     nValue = nResult; 
    } 
    return nError; 
} 


LONG GetBoolRegKey(HKEY hKey, const std::wstring &strValueName, bool &bValue, bool bDefaultValue) 
{ 
    DWORD nDefValue((bDefaultValue) ? 1 : 0); 
    DWORD nResult(nDefValue); 
    LONG nError = GetDWORDRegKey(hKey, strValueName.c_str(), nResult, nDefValue); 
    if (ERROR_SUCCESS == nError) 
    { 
     bValue = (nResult != 0) ? true : false; 
    } 
    return nError; 
} 


LONG GetStringRegKey(HKEY hKey, const std::wstring &strValueName, std::wstring &strValue, const std::wstring &strDefaultValue) 
{ 
    strValue = strDefaultValue; 
    WCHAR szBuffer[512]; 
    DWORD dwBufferSize = sizeof(szBuffer); 
    ULONG nError; 
    nError = RegQueryValueExW(hKey, strValueName.c_str(), 0, NULL, (LPBYTE)szBuffer, &dwBufferSize); 
    if (ERROR_SUCCESS == nError) 
    { 
     strValue = szBuffer; 
    } 
    return nError; 
} 
+0

Слишком много кода, недостаточно объяснив. Это находится в опасности получения downvotes. – Will

+0

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

1

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

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

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