ник: IceMIND
Ну похоже, что моральный аспект проблемы уже полностью озвучен,
настало время рассмотреть технический
Если я правильно понял задачу - есть программа, которая нормально работает, но при этом она должна нормально работать только при наличии автора в организации, использующей эту программу, в противном случае она должна блокироваться через определенный промежуток времени.
Один из вариантов решения этой задачи - механизм блокировки с отсроченным действием:
1. Файл программы должен быть компилирован в MDE иначе весь механизм блокировки легко отыскивается и отключается сторонним программистом
2. Для работы механизма нужно создать собственное свойство у одного из объектов базы данных (например у одной из системных таблиц, которые не отображаются в списке таблиц), при этом имя этого свойства нужно выбрать непривлекающим внимание и уж точно не раскрывающее его назначение (для примера назовем его rowsborder)
3. Выбирается событие, которое будет отвечать за проверку и изменение значения свойства rowsborder (для примера назовем его Тригер) реально оно может быть - открытие начальной формы.
Сам механизм:
Задание значения счетчика:
При наступлении события Тригер при помощи функции RND генерируется значение в диапазоне от 0 до 1 и если оно <0.5 к значению свойства rowsborder прибавляется 1 else прибавляется 2. Таким образом вы получаете счетчик с неравномерным накоплением.
Использование счетчика:
Событие Тригер при наступлении проверяет значение счетчика и при условии что оно >= определенного числа выполняет действия по блокировке работы программы. В качестве блокировки может выскакивать сообщение внешне похожее на сообщение Access об ошибке и программа закрывается. Это позволяет скрыть само наличие механизма блокировки и отвод подозрений об умысле со стороны разработчика (хотя со временем это может начать вызывать подозрения). Для отсутствия ритмичности в появлении блокировки и служит счетчик с неравномерным накоплением.
Если программа запускается известное количество раз в день(например 1 - утром включили, а вечером выключили), то, если нужно, чтобы программа блокировалась через 90 дней можно указать предельное значение счетчика равным 140, т.к. иногда будет добавляться не 1, а 2.
Если нужно указать точное количество дней, то необходимо создать еще одно свойство типа rowsborder, в которое помещать текщую дату. Т.е. при наступлении Тригера программа проверяет отличается ли дата компьютера от даты в свойстве и добавляет к счетчику разницу в днях. Если разница равна 1 - то используем функцию RND как описано выше и предел счетчика ставим равным желаемое количество дней*1,5.
Снятие блокировки
Для снятия блокировки то бишь устранения "ошибки" можно использовать 2 варианта:
1. Заблаговременное обнуление счетчика, например каждый день при выходе на работу автора (тем самым блокировка вообще не будет всплывать):
- из самой программы - например введя определеную последовательность нажатий клавиш
- из сторонней программы путем внешнего редактирования свойства rowsborder
2. Обнуление счетчика при возникшей блокировке теми же способами, что и в пункте 1. Тогда у пользователей будет возникать психичекая боязнь ошибки и боязнь расставания с разработчиком как единственным кто ее может быстро устранить