Как предотвратить демонстрационную программу Java от регулярного использования моего клиента?

StackOverflow https://stackoverflow.com/questions/2146315

  •  23-09-2019
  •  | 
  •  

Вопрос

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

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

У меня появилось одно решение. Я делаю 4 файла .txt через одну и ту же программу и храню их в Diff. Места на клиентском компьютере, и эти файлы будут хранить количество раз, когда программа была запущена. Каждый раз, когда начинается приложение, оно проверяет все эти файлы, и, если какой -либо файл содержит число, представляющее пороговый предел, он просто выходит, говоря, что пороговый предел достигнут.

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

Было бы еще лучше, если бы программа была удалена после его порогового предела.

Это было полезно?

Решение

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

Вы можете попробовать ниже фрагмент

Calendar expiry = Calendar.getInstance();
expiry.set(2010, 1, 31,0,0); // Expire at 31 Jan 2010
Calendar now = Calendar.getInstance();
// If you don't trust client's clock, fetch time from some reliable time server
if( now.after(expiry)){
// Exit with proper expiry message
}
else
{ 
// let the customer enjoy your software
} 

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

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

Подумайте о использовании Java Web Betpement для развертывания вашего программного обеспечения с помощью файла JNLP на одного клиента с конкретным клиентом, трудно догадаться, местоположение. Это позволяет вам выполнять централизованное управление и удалять JNLP, когда период времени истекает.

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

Позвольте им попробовать это через удаленный рабочий стол или VNC.

Для приложений Windows я делаю это следующим образом

Я создаю ключ реестра в своей программе с датой, которую он использовался в первый раз. Этот ключ скрыт в поле, рыхле, не наводящему наводящему имущению и значению, введенным;

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

В моем коде проверки, каждый раз, когда я начинаю программу, она проверяет дату во время и дату, когда программа использовалась в первый раз. Если это правильно, я тоже храню в последний раз, когда использовалась программа. У нас есть 3 случая для проверки:

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

  2. Если дата компьютера меньше, чем в последний раз, когда использовалась программа, пользователь попытался перемотать системные часы. После этого программа больше не может быть использована

  3. Последний случай - это когда дата системы составляет после начальной даты использования и до даты истечения срока действия. В этом случае программа разрешено использовать.

    // Этот код предназначен для системного реестра доступа к публичным статическим предпочтениям userpref = preferences.userRoot ();

    // написать реестр userpref.put ("keyname", "value");

    // Читать строку реестра read = userpref.get (key, "0");

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

для потомки, код, который я использовал, выглядел что-то вроде:

SPUser author = GetNewUser(new SPFieldUserValue(web, file.Item[SPBuiltInFieldId.Author].ToString()));
SPUser editor = GetNewUser(new SPFieldUserValue(web, file.Item[SPBuiltInFieldId.Editor].ToString()));
DateTime created = file.TimeCreated;
DateTime modified = file.TimeLastModified;

SPFileCollection files = file.ParentFolder.Files;
byte[] content;

using (Stream stream = file.OpenBinaryStream())
{
    content = new byte[stream.Length];
    stream.Read(content, 0, (int)stream.Length);
}

file.Delete();

SPFile newFile = files.Add(url, content, author, editor, created, modified);
foreach (KeyValuePair<string, object> pair in properties)
{
    newFile.Item[pair.Key] = pair.Value;
}
newFile.Item.SystemUpdate();
.

Быстро это то, что я думаю.

  1. Создать структуру данных, подобную

учебный класс {

prop uid = hostname; Prop maxusage = 5; Пропасть уже использована = 5;

}

  1. Реализуйте этот класс как сериализуемый, напишите этот файл на диск без имени хоста, например, http://www.java2s.com/code/java/file-input-outment/serializerclass.htm

  2. Отправьте этот сериализуемый файл с приложением.

  3. Когда приложение запускается в первый раз, записывает UIID Property с помощью имени хоста хоста, на котором работает приложение. Уменьшите уже упоминаемые каждый раз, когда приложение запускается и сохраняет его в файле.

  4. Каждый раз, когда приложение запускает, проверьте, присутствует ли файл, если нет, если да, то проверьте, что UID имеет правильное имя хоста, и что число уже используемых не является == 0

Если вы используете что -то вроде Javawebstart, это также будет очень легко.

Надеюсь, это поможет вашему делу.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top