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

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

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

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

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

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

5
задан Yatendra Goel 27 January 2010 в 11:11
поделиться

7 ответов

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

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

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
} 

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

7
ответ дан 13 December 2019 в 05:35
поделиться

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

var formsCollection = document.getElementsByTagName("form");
for(var i=0;i<formsCollection.length;i++)
{
   alert(formsCollection[i].name);
}

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

-121--3787349-

Отключить проверку JSP в Eclipse (это всегда был сбой ), или, лучше, просто не использовать скриптлеты . Считается плохой практикой . Сохраняйте код Java в реальных классах Java и используйте taglibs/EL в JSP все пути.

-121--4460276-

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

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

3
ответ дан 13 December 2019 в 05:35
поделиться

Вот ссылка на решение ActiveState - и код в случае его повторного исчезновения.

==================================================
xmlreader.py:
==================================================
from xml.dom.minidom import parse


class NotTextNodeError:
    pass


def getTextFromNode(node):
    """
    scans through all children of node and gathers the
    text. if node has non-text child-nodes, then
    NotTextNodeError is raised.
    """
    t = ""
    for n in node.childNodes:
    if n.nodeType == n.TEXT_NODE:
        t += n.nodeValue
    else:
        raise NotTextNodeError
    return t


def nodeToDic(node):
    """
    nodeToDic() scans through the children of node and makes a
    dictionary from the content.
    three cases are differentiated:
    - if the node contains no other nodes, it is a text-node
    and {nodeName:text} is merged into the dictionary.
    - if the node has the attribute "method" set to "true",
    then it's children will be appended to a list and this
    list is merged to the dictionary in the form: {nodeName:list}.
    - else, nodeToDic() will call itself recursively on
    the nodes children (merging {nodeName:nodeToDic()} to
    the dictionary).
    """
    dic = {} 
    for n in node.childNodes:
    if n.nodeType != n.ELEMENT_NODE:
        continue
    if n.getAttribute("multiple") == "true":
        # node with multiple children:
        # put them in a list
        l = []
        for c in n.childNodes:
            if c.nodeType != n.ELEMENT_NODE:
            continue
        l.append(nodeToDic(c))
            dic.update({n.nodeName:l})
        continue

    try:
        text = getTextFromNode(n)
    except NotTextNodeError:
            # 'normal' node
            dic.update({n.nodeName:nodeToDic(n)})
            continue

        # text node
        dic.update({n.nodeName:text})
    continue
    return dic


def readConfig(filename):
    dom = parse(filename)
    return nodeToDic(dom)





def test():
    dic = readConfig("sample.xml")

    print dic["Config"]["Name"]
    print
    for item in dic["Config"]["Items"]:
    print "Item's Name:", item["Name"]
    print "Item's Value:", item["Value"]

test()



==================================================
sample.xml:
==================================================
<?xml version="1.0" encoding="UTF-8"?>

<Config>
    <Name>My Config File</Name>

    <Items multiple="true">
    <Item>
        <Name>First Item</Name>
        <Value>Value 1</Value>
    </Item>
    <Item>
        <Name>Second Item</Name>
        <Value>Value 2</Value>
    </Item>
    </Items>

</Config>



==================================================
output:
==================================================
My Config File

Item's Name: First Item
Item's Value: Value 1
Item's Name: Second Item
Item's Value: Value 2
-121--758388-

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

-121--1420498-

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

0
ответ дан 13 December 2019 в 05:35
поделиться

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

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

класс {

uid = имя хоста; опорный максимум = 5; PROP уже использован = 5;

}

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

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

  3. Когда приложение запускает первый раз, напишите свойство UID с именем хоста хоста. Приложение работает на. Снижение уже использованного каждый раз, когда приложение работает и сохраняет его в файл.

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

, если вы используете что-то вроде Javawebstart будет очень прост.

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

0
ответ дан 13 December 2019 в 05:35
поделиться

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

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

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

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

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

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

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

    // Этот код для системного реестра доступа Общественные статические предпочтения userpref = предпочтения .userroot ();

    // Написать реестр userpref.put («KeyName», «значение»);

    // Читайте реестр String Read = userPref.get (ключ, "0");

1
ответ дан 13 December 2019 в 05:35
поделиться

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

Если файл не найден или значение равно нулю Выход программы.

0
ответ дан 13 December 2019 в 05:35
поделиться

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

1
ответ дан 13 December 2019 в 05:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: