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

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

Вопрос

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

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

Для Windows XP я использовал такие файлы, как:

c:\win386.swp
c:\windows\user.dat
and several others.

Два вопроса:

  1. Это достойный способ сделать это или есть что-то лучше?

  2. (Предполагая, что ответ на вопрос 1 «приличный»). С какими файлами Windows Vista и Windows 7 можно было бы сравнить?


Заключение:Приянк сказал нечто очевидное, ускользнувшее от меня:Вместо использования каких-либо системных файлов проще всего использовать временную метку самой программы.В конце концов, дата его установки — это именно та дата, с которой вы хотите начать пробную версию.

Как оказалось, ваши ответы, а также мое исследование других связанных вопросов StackOverflow и упомянутых статей привели меня к выбору гораздо более простой схемы.Мои пользователи пробной версии уже должны получить ключ для использования пробной версии.У меня есть зарегистрированная дата, встроенная в ключ.Мне действительно не нужно проверять, переводят ли часы назад.Вместо этого я могу просто посмотреть, находится ли текущее время между датой регистрации и датой регистрации плюс n дней.

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

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

Решение

Файлы Windows всегда будут иметь более раннюю дату, лучше всего сверить дату создания или изменения вашей программы с системной датой.Или каждый раз, когда ваша программа завершает работу, обязательно запишите временную метку и сравните ее со следующим запуском программы, и всегда есть NTP: http://en.wikipedia.org/wiki/Network_Time_Protocol

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

ИМХО, лучший способ сделать это - сохранить текущую метку времени в реестре при первом запуске вашей программы, а затем сравнить ее с текущей меткой времени при следующем запуске и обновить метку времени, если все в порядке.

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

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

Я часто говорю людям: если ваше программное обеспечение привлекает хакеров, возможно, это что-то полезное/хорошее.Нет смысла защищать программное обеспечение, которое никто не считает полезным.

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

Как реализовать ограниченную по времени пробную версию на форуме Джоэла
Ограниченная по времени пробная версия и сертификация Windows на ТАК
Нужен совет по реализации ограниченной по времени пробной версии на ТАК

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

Windows предоставляет API для уведомления об изменениях системного времени.Один, например.предоставляется ли элемент управления activex sysinfo.ocx здесь.

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