Windows CE autostart aplikacji – klucz rejestru Init, LaunchXX, DependXX, SignalStarted

Pytanie

Jak zrobić klucz rejestru win CE żeby aplikacja automatycznie się uruchamiala

Odpowiedź Sztucznej Inteligencji


Bezpośrednia odpowiedź na pytanie

  • Dodaj w rejestrze Windows CE (najczęściej w HKEY_LOCAL_MACHINE\Init) parę wartości LaunchXX/DependXX, gdzie XX = 00-99.
  • LaunchXX (REG_SZ) zawiera pełną ścieżkę do pliku EXE Twojej aplikacji.
  • (Opcjonalnie) DependXX (REG_MULTI_SZ) wskazuje numery procesów, które muszą wystartować przed Twoją aplikacją.
  • Zapisz rejestr do pamięci trwałej i wykonaj soft-reset – aplikacja uruchomi się automatycznie przy każdym starcie.

Kluczowe punkty
• Najpewniejszy mechanizm: klucz HKLM\Init
• Alternatywy: HKLM\Startup, Run, folder \Windows\Startup, Startup Manager OEM
• Uważaj na trwałość rejestru i kolejność inicjalizacji (SignalStarted)

Szczegółowa analiza problemu

  1. Architektura uruchamiania w Windows CE
    • Jądro bootuje, ładuje sterowniki → parser rejestru czyta HKLM\Init.
    • Wartości LaunchXX (REG_SZ) uruchamiane rosnąco.
    DependXX (REG_MULTI_SZ) to lista słów 16-bitowych odpowiadających wcześniejszym procesom, od których zależy start.
    • Po uruchomieniu proces powinien wywołać SignalStarted(n), gdzie n to wartość przekazana w linii poleceń (zwykle liczba), aby odblokować kolejne zależne procesy.

  2. Wybór numeru XX
    • Sterowniki i gwes.dll (menedżer okien) to zwykle Launch10-30.
    • Powłoka (explorer.exe lub aplikacja nawigacyjna OEM) bywa Launch50-80.
    • Aplikację użytkownika najbezpieczniej dodać jako Launch90-99, np. Launch99.

  3. Przykładowy plik .reg

    REGEDIT4
    [HKEY_LOCAL_MACHINE\Init]
    ; Uruchom moją aplikację jako ostatnią
    "Launch99"="\\Storage Card\\MojaApp\\MojaApp.exe 99"
    ; Zależność: poczekaj na gwes (0x14) i explorer (0x32) – jeśli istnieją
    "Depend99"=hex:14,00,32,00,00,00

    • Zwróć uwagę na podwójne backslash’e i zakończenie listy NULL-em (00,00).
    • Parametr 99 przekazany w linii poleceń to token dla SignalStarted(99).

  4. Import i utrwalenie
    • Skopiuj plik na urządzenie → dotknij, by zaimportować.
    • W wielu urządzeniach CE rejestr jest w RAM; uruchom „Save Registry”, RegFlushKey lub analogiczne narzędzie OEM, aby zapis był trwały w Flash/NAND.

  5. Kodowe dodanie wpisu (C/C++)

    BOOL AddAutoStart()
    {
    HKEY hKey; 
    if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("Init"), 0, KEY_SET_VALUE, &hKey)!=ERROR_SUCCESS)
       return FALSE;
    LPCTSTR path = TEXT("\\Storage Card\\MojaApp\\MojaApp.exe 99");
    RegSetValueEx(hKey, TEXT("Launch99"), 0, REG_SZ,
                 (const BYTE*)path, (lstrlen(path)+1)*sizeof(TCHAR));
    WORD deps[] = {0x14, 0x32, 0x00};               // gwes + explorer
    RegSetValueEx(hKey, TEXT("Depend99"), 0, REG_MULTI_SZ,
                 (const BYTE*)deps, sizeof(deps));
    RegCloseKey(hKey);
    return TRUE;
    }
  6. Alternatywne metody
    HKLM\Startup – OEM-owy mechanizm spotykany np. w Beckhoff, Toradex (łatwiejszy lecz późniejsze uruchomienie).
    HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run – wspierany w niektórych buildach CE 6/7.
    • Folder \Windows\Startup ze skrótem .lnk:
    25#"\Storage Card\MojaApp\MojaApp.exe"
    • Startup Manager (GUI) – obecny w niektórych dystrybucjach (np. Beckhoff).

Aktualne informacje i trendy

  • Windows CE/Embedded Compact jest w fazie wygasania, ale wciąż utrzymywany w przemyśle automatyki (Beckhoff CX, Advantech, ProFace) – stąd aktualne poradniki OEM (2023-2024) nadal opisują klucz Init.
  • Nowe projekty migrują do Windows IoT Core/Enterprise LTSC lub Linux Yocto, gdzie autostart realizuje się usługą systemd lub regułami TPM.
  • Coraz częściej OEM dostarcza narzędzie „Startup Manager”, upraszczające opisany proces (patrz dokumentacja Beckhoff 2024).

Wspierające wyjaśnienia i detale

  • REG_MULTI_SZ w CE to lista słów (2-bajtów), a nie ciągów, dlatego DependXX zapisujemy w formacie hex:.
  • Jeśli w swoim buildzie CE firma OEM zmieniła mapę wartości (np. Launch50 uruchamia powłokę nawigacyjną), możesz zamiast dodawać Launch99 podmienić ścieżkę w istniejącym Launch50. To jednak ryzykownie „brickuje” urządzenie w razie błędu.

Aspekty etyczne i prawne

  • Modyfikując urządzenia PNA/GPS często łamiesz licencję producenta. Sprawdź warunki gwarancji.
  • W systemach automatyki przemysłowej każda zmiana rejestru powinna być zaakceptowana w procedurze walidacji i zgodna z normami (np. FDA 21 CFR 11, IEC 62443).
  • Zabezpieczaj urządzenie przed nieautoryzowanym dostępem (hasło, blokada ActiveSync).

Praktyczne wskazówki

  • Zanim zmodyfikujesz Init, zrób kopię klucza HKLM\Init (CeRegEditor, reg save).
  • Testuj na zasilaniu laboratoryjnym z przyciskiem reset – ułatwia odde-brick.
  • Jeśli urządzenie czyści rejestr po twardym resecie, umieść skrypt .reg w \Windows\Startup i automatycznie importuj przy każdym boot.

Ewentualne zastrzeżenia lub uwagi dodatkowe

  • Część tanich PNA nie posiada narzędzia „Save Registry”; po każdej utracie zasilania rejestr wraca do ROM.
  • Nie wszystkie buildy CE obsługują klucz Run; zawsze preferuj Init lub mechanizm OEM.
  • SignalStarted jest wymagany tylko, gdy inne procesy deklarują na nim zależność – ale warto go wywołać dla zgodności.

Sugestie dalszych badań

  • Automatyczne podpisywanie i ładowanie aplikacji (.cab + certyfikaty) w CE 7 dla ułatwienia aktualizacji OTA.
  • Migracja istniejących projektów CE do Windows IoT Enterprise LTSC 2021; mapowanie mechanizmu Init na rejestr RunOnce lub usługę Windows.
  • Analiza bezpieczeństwa: MITRE ATT&CK T1547.001 (persistence via Run Keys) w kontekście CE.

Krótkie podsumowanie

Aby uzyskać autostart aplikacji w Windows CE: dodaj w HKLM\Init wpis LaunchXX z pełną ścieżką do programu oraz (opcjonalnie) DependXX definiujący zależności, zapisz rejestr w pamięci trwałej i zresetuj urządzenie. Mechanizm Init działa najwcześniej i najpewniej, ale wymaga ostrożności – błędny wpis może uniemożliwić start systemu. Alternatywy (Startup, Run, narzędzia OEM) są prostsze, lecz aktywują się dopiero po uruchomieniu powłoki.

Oceń odpowiedź:
Zastrzeżenie: Odpowiedzi udzielone przez sztuczną inteligencję (model językowy) mogą być niedokładne i wprowadzające w błąd. Elektroda nie ponosi odpowiedzialności za dokładność, rzetelność ani kompletność prezentowanych informacji. Wszystkie odpowiedzi powinny być zweryfikowane przez użytkownika.

Zadaj dodatkowe pytanie Sztucznej Inteligencji

Czekaj (2min)...