Заставьте часы одного приложения идти быстрее
30-дневный пробный период истекает за 30 дней, если вы не можете сдвинуть время. Обычный совет — перевести системные часы вперёд, что требует прав администратора и тащит за собой все остальные программы на машине. Здесь вместо этого сдвигается один процесс.
Насколько быстро
Выберите целочисленный множитель. Часы приложения идут во столько раз быстрее настоящих, начиная с того момента, с которого стартует сессия.
| Множитель | Одна настоящая минута становится | Для чего полезно |
|---|---|---|
x60 | часом | почасовые задания, тайм-ауты сессий, время жизни токенов |
x1440 | сутками | суточные переходы, 30-дневный пробный период за полчаса |
x43200 | 30-дневным пробным периодом | наблюдать окончание всего пробного периода, пока вы это читаете |
x525600 | годом | годовые продления, истечение сертификатов |
x1000000 | примерно 1,9 года | потолок |
# Начать с настоящего времени сейчас и идти сутки за минуту chrono run "C:\apps\test.exe" --mode x1440 # Начать с выбранной даты и ускоряться от неё chrono run "C:\apps\test.exe" --at 2027-12-01T09:00:00 --mode x1440 # Или вовсе остановить часы chrono run "C:\apps\test.exe" --mode frozen
То, на чём все попадаются: часов две
Ускорение настенных часов — того, что возвращают DateTime.Now и его
аналоги, — само по себе не ускоряет обратный отсчёт. Это два разных вопроса,
которые приложение может задать операционной системе, и множество программ измеряют «тридцать
дней» вторым, а не первым.
Поэтому ось длительностей — счётчики тиков, задержки, ожидания и таймеры — это отдельный переключатель:
--scale-durationпереводит на часы сессии также счётчики тиков, задержки сна и таймеры, а ожидания объектов считаются и сохраняют реальную длительность. Без негоx1440гонит календарь вперёд, а пятисекундный таймер по-прежнему длится пять реальных секунд - только таймер, заведённый на конкретные дату и время, следует за часами сессии в каждой сессии.--scale-qpcдополнительно масштабирует высокоточный счётчик. Именно с него читают прошедшее времяmonotonicв Python 3.13+,Stopwatchв .NET иnanoTimeв Java, и он выключен по умолчанию, потому что его масштабирование дестабилизировало отрисовку в тестах.
Если кажется, что множитель ничего не делает с обратным отсчётом, почти всегда дело в этом.
# Приложение-таймер: ускорить календарь И обратные отсчёты chrono run "C:\apps\Timer.exe" --mode x60 --scale-duration # Приложение на Python или .NET, измеряющее прошедшее время по высокоточному счётчику chrono run "C:\apps\Job.exe" --mode x60 --scale-duration --scale-qpc
Смена скорости без перезапуска
Множитель можно менять посреди сессии, а часы при этом заново привязываются, а не перескакивают, так что они никогда не идут назад, когда скорость падает. Часами можно и просто перескочить — вперёд или назад, как это делает ноутбук после повторной синхронизации с сервером времени, а это тот случай, который ломает всё, что измеряет прошедшее время без защиты.
# Работать на x60, затем через две секунды переключиться на x1440 chrono run "C:\apps\test.exe" --mode x60 --set-after 2:1440 # Запустить, затем через пять секунд перебросить часы на выбранный момент chrono run "C:\apps\test.exe" --jump-after 5:2028-01-01T00:00:00
Чего он не делает
- Не трогает системные часы. В этом смысл, а не ограничение, — но это значит, что всё, что читает время с сервера, из базы данных или с другой машины, остаётся нетронутым, и аудит скажет вам, когда так случится.
- Скачок меняет то, что видит приложение, а не то, когда оно просыпается. Задержки сна и таймеры, уже переданные ядру, сохраняют длительность, полученную при установке. Большинство приложений опрашивает часы, поэтому скачки на практике работают - но не во всех.
- Время не замедляется. Множители — это целые числа от единицы и выше, плюс остановленные часы на нуле.
Дошло ли что-либо из этого до вашего приложения — не то, что стоит предполагать. Об этом скажет сессия →