Helpdesk: Błąd Application failed to start. Contact *** for details. Error code 662

18-lip-2020

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

Komentarze są wyłączone

Autor: Rafał Kraik