Как предотвратить демонстрационную программу Java от регулярного использования моего клиента?
Вопрос
Я сделал демонстрационную небольшую программу, которую я хочу доставить своему клиенту, чтобы он мог запустить ее 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 случая для проверки:
Если дата, поступающая больше, чем начальное время, перекрывая период демонстрации, программа больше не используется.
Если дата компьютера меньше, чем в последний раз, когда использовалась программа, пользователь попытался перемотать системные часы. После этого программа больше не может быть использована
Последний случай - это когда дата системы составляет после начальной даты использования и до даты истечения срока действия. В этом случае программа разрешено использовать.
// Этот код предназначен для системного реестра доступа к публичным статическим предпочтениям 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();
. Быстро это то, что я думаю.
- Создать структуру данных, подобную
учебный класс {
prop uid = hostname; Prop maxusage = 5; Пропасть уже использована = 5;
}
Реализуйте этот класс как сериализуемый, напишите этот файл на диск без имени хоста, например, http://www.java2s.com/code/java/file-input-outment/serializerclass.htm
Отправьте этот сериализуемый файл с приложением.
Когда приложение запускается в первый раз, записывает UIID Property с помощью имени хоста хоста, на котором работает приложение. Уменьшите уже упоминаемые каждый раз, когда приложение запускается и сохраняет его в файле.
Каждый раз, когда приложение запускает, проверьте, присутствует ли файл, если нет, если да, то проверьте, что UID имеет правильное имя хоста, и что число уже используемых не является == 0
Если вы используете что -то вроде Javawebstart, это также будет очень легко.
Надеюсь, это поможет вашему делу.
Дайте им клиент «ключ» и попросите программное обеспечение запрашивать небольшой сервлет на своем собственном веб -сервере, независимо от того, является ли продукт в настоящее время действителен для клиента с этим ключом.