Aplikacja jest dostępna na CDROM, a właściwie była, bo płyta została przekopiowana z CDROM na dysk. Po uruchomieniu startera aplikacji niestety zamiast okienka aplikacji wyskakiwał błąd:
Application failed to start. Contact *** for details. Error code 662
Aplikacja nie była uruchamiana już chyba od ponad roku, więc właściwie przyczyną mogło być wszystko – zaczynając od odinstalowania wymaganego komponentu, instalacja konfliktowej łatki windows itp. Tym razem było jednak inaczej. Aplikacja oczekiwała określonej daty na komputerze – to ciekawe, bo podczas zakupu programu nie było mowy o tym, że będzie on działać tylko przez określony czas! Przy okazji trzeba pamiętać:
- do zmiany czasu wymagane jest uprawnienie administratora (albo odpowiednie prawo)
- zmiana czasu jest co do zasady złym pomysłem, bo może wtedy przestać działać automatyczne przywracanie systemu, kopie zapasowe, uwierzytelnienie certyfikatami i wiele wiele innych rzeczy, więc jeśli już zmieniać czas to robić to na jak najkrótszą chwilę
- aplikacja sprawdza czas tylko podczas uruchomienia, a nie w czasie pracy, więc wystarczy zmieniać czas na kilka/kilkanaście sekund podczas startu
- czas może wrócić do poprzednich ustawień, jeśli synchronizacja jest włączona
Zmiana czasu w sposób interaktywny jest męczącą, trzeba się przeklikać przez wiele okienek, dlatego wymyśliłem, że zrobię to skryptem uruchamianym „jako administrator”. Pomysł jest następujący:
- wyliczymy czas 2 lata wstecz – gdyby to było za mało, to można zmienić na 3, 4 itd. lub przypisać datę na stałe
- zmienimy ustawienia synchronizacji czasu w bezpośrednio rejestrze na „NoSync”
- przestawimy datę
- uruchomimy aplikację – zmień ścieżkę na właściwą
- zatrzymamy skrypt na np. 15 sekund – można zmienić zależnie od potrzeb
- potem wrócimy do starej daty. Będzie ona o 15 sekund nieaktualna, ale ponieważ za chwilę włączymy synchronizację czasu, to problem rozwiąże się sam, a 15 sekund nie jest aż takim problemem. Ewentualnie w tym miejscu można by dodać 15 sekund lub nawet uruchomić ręczną synchronizację czasu
- ostatni krok, to włączenie synchronizacji bezpośrednio w rejestrze na „NTP”
# przesun czas o 2 lata wstecz # uruchamiaj jako administrator $oldDate = Get-Date $newDate = $oldDate.AddYears(-2) Set-ItemProperty HKLM:\SYSTEM\CurrentControlSet\services\W32Time\Parameters -Name "Type" -Value "NoSync" set-date -Date $newDate Start-Process -FilePath D:\MY_FOLDER\MY_APPLICATION.EXE Start-Sleep -Seconds 15 set-date -Date $oldDate Set-ItemProperty HKLM:\SYSTEM\CurrentControlSet\services\W32Time\Parameters -Name "Type" -Value "NTP"
I to wszystko! Aplikację należy uruchomić przy pomocy skrótu, jako administrator. Aplikacja przy starcie odczytuje zmieniony czas i przechodzi do kolejnych kroków uruchomienia, a gdy już działa… czas wraca do poprzedniej wartości