Automatische Sicherungskopie der Navigator-INIs

  • Hallo zusammen,
    Im Anhang findet Ihr ein kleines Mort-Script, das die wichtigen INI-Dateien vom MEDION-Navigator5.1 bzw. vom Navigon Mobile Navigator 5.1 bei jedem Start in das Scriptverzeichnis sichert. Vorher findet eine einfache Prüfung der INI-Dateien statt, da nach meinen Erfahrungen die INI, wenn sie denn beschädigt ist, die Dateilänge 0 Bytes hat und somit leer ist.
    Sollte dies der Fall sein, wird automatisch die letzte Sicherungskopie ins Navigatorverzeichnis zurückgeschrieben und dann der Navigator normal gestartet. Für den Mobile-Navigator müssen allerdings noch die Dateipfade angepasst werden, da ich diese nicht kenne.


    Hinweis: Dieses Script ist lediglich die Standalone-Auskopplung einer Unterroutine aus meinem Script Navi-Runner, das allerdings speziell für den Medion MD96700 angepasst ist. Daher bitte keine Fragen nach großartigen Erweiterungen ;).
    Wer möchte, kann den Codeschnipsel aber auch gerne in eigene Start-Scripts einbinden (Gruß an Zappa :D)


    Viel Spass damit.


    Gruß, Argasha



    #################################################
    # Ini-Backup.mscr; Version 1.0 Autor 0.Wallner 11.02.2006
    #################################################
    # Benötigt zusätzlich das Programm: 'Autorun.exe' des Interpreters
    # 'MortScript' Ab Version 3.1RC6 oder höher.
    # Zu erhalten unter: http://www.sto-helit.de (Freeware).
    #
    # Nur Für nichtkommerziellen Gebrauch. Verwendung auf eigene Gefahr!!
    # Betriebssystem Microsoft Windows Mobile 5.0 auf Medion MD96700 getestet,
    # andere sollten aber auch laufen, da keine hardwarespezifischen Befehle
    # verwendet wurden.
    #
    # Beschreibung: Das Script startet den Medion Navigator 5.1 oder den
    # Navigon Navigator 5.1 falls er noch nicht gestartet ist.
    # (Bitte unten den Pfad anpassen!!)
    # Das Script erstellt automatisch Sicherungskopien der wichtigen
    # Navigator-Dateien NavLib.ini, prefs.ini und spgps,ini, da diese Dateien
    # manchmal beschädigt werden, speziell wenn der Navigator auf der Speicherkarte
    # installiert ist. Wenn beim Start festgestellt wird, das eine dieser Dateien
    # defekt ist, wird automatisch die letzte Sicherungskopie zurückgeschrieben.
    #
    # INSTALLATION: Als erstes 'MortSkript' wie auf dessen Hompage beschrieben
    # installieren. und einmalig die Mortscript.exe im MortScript
    # Installationsverzeichnis starten.
    # Nach erstmaligem Start der Mortscript.exe im MortScript Verzeichnis reicht
    # es, dieses Script in ein beliebiges Verzeichnis auf dem PDA
    # zu kopieren, da die Datei-Endung .MSCR bereits registriert ist und das Script
    # beim Aufrufen direkt gestartet wird.
    # Das Script verhält sich dann wie ein Programm, für das man in
    # Windows\Startmenü einen Link erzeugen und diesen anschliessend auf einen
    # Hardware-Button (Navigator-Taste) legen kann.
    ##################################################


    ##################################################
    #### Variablen, die vom User verändert werden können ####
    ##################################################


    #### Preset: Pfad zum Navigator-Verzeichnis angeben
    Set MNPath, "\Storage Card\Programme\MEDION\MEDION-Navigator"


    #### Preset: Dateiname der Navigator EXE angeben
    Set MNExe, "MEDION-Navigator.exe"


    #### Preset: Name des Navigator-Fensters (Fenstertitel)angeben
    Set NaviWindow, "Medion-Navigator"


    ###################################################
    #### Programm-Start #####
    ###################################################


    ### Abfrage, ob Navigator - EXE vorhanden
    If Not fileExists {%MNPath% \ %MNExe%}
    Message "Navigator nicht gefunden!^CR^^LF^Bitte Pfade prüfen/installieren", "[INICopy V1.0]"
    Exit
    EndIf


    ### Aufruf Unterroutine zur Dateipüfung der Navigator-INIs mit anschliessender
    ### Sicherungskopie, wenn Dateien OK.
    If not wndExists %NaviWindow%
    Call INICopy
    else
    Message "Navigator läuft schon!^CR^^LF^INI-Sicherungskopie nicht möglich!^CR^^LF^Beende Script.", "[INICopy V1.0]"
    EndIf


    #### Start des Navigators ###
    If not wndExists %NaviWindow%
    run {%MNPath% \ %MNExe%}
    WaitFor Medion-Navigator,20
    EndIf
    Exit



    #### Prüfung der INI-Dateien, Wenn OK, Erstellung der Sicherungskopien. Wenn
    #### Dateifehler, zurückschreiben der letzten Sicherung, falls vorhanden.
    Sub INICopy
    GetSystemPath ScriptPath, ScriptPath


    IniRead {%MNPath% \ "prefs.ini"}, "RoutingOptionsPrefs", "standard", INICheck
    #Troubleshooting - Message %INICheck%, "Wert Prefs.ini ="
    If {%INICheck% eq ""}
    Message "Prefs.ini defekt!!^CR^^LF^Schreibe Sicherungskopie zurück...", "[INICopy V1.0]"
    If fileExists {%ScriptPath% \ "prefs.ini"}
    Copy {%ScriptPath% \ "prefs.ini"}, {%MNPath% \ "prefs.ini"}, 1
    else
    Message "Ooops! Leider noch keine Sicherungskopie vorhanden!^CR^^LF^Bitte prefs.ini selbst reparieren.", "[INICopy V1.0]"
    Exit
    EndIf
    else
    #Troubleshooting - Message "Erstelle Sicherungskopie von Prefs.ini "
    Copy {%MNPath% \ "prefs.ini"}, {%ScriptPath% \ "prefs.ini"}, 1
    EndIf


    IniRead {%MNPath% \ "NavLib.ini"}, "Properties", "ConfigFilesDir", INICheck
    #Troubleshooting - Message %INICheck%, "Wert NavLib.ini ="
    If {%INICheck% eq ""}
    Message "NavLib.ini defekt!!^CR^^LF^Schreibe Sicherungskopie zurück...", "[INICopy V1.0]"
    If fileExists {%ScriptPath% \ "NavLib.ini"}
    Copy {%ScriptPath% \ "NavLib.ini"}, {%MNPath% \ "NavLib.ini"}, 1
    else
    Message "Ooops! Leider noch keine Sicherungskopie vorhanden!^CR^^LF^Bitte NavLib.ini selbst reparieren.", "[INICopy V1.0]"
    Exit
    EndIf
    else
    #Troubleshooting - Message "Erstelle Sicherungskopie von NavLib.ini "
    Copy {%MNPath% \ "NavLib.ini"}, {%ScriptPath% \ "NavLib.ini"}, 1
    EndIf


    IniRead {%MNPath% \ "spgps.ini"}, "Parser", "AutoDetectTimeout", INICheck
    #Troubleshooting - Message %INICheck%, "Wert spgps.ini ="
    If {%INICheck% eq ""}
    Message "Spgps.ini defekt!!^CR^^LF^Schreibe Sicherungskopie zurück...", "[INICopy V1.0]"
    If fileExists {%ScriptPath% \ "spgps.ini"}
    Copy {%ScriptPath% \ "spgps.ini"}, {%MNPath% \ "spgps.ini"}, 1
    else
    Message "Ooops! Leider noch keine Sicherungskopie vorhanden!^CR^^LF^Bitte spgps.ini selbst reparieren.", "[INICopy V1.0]"
    Exit
    EndIf
    else
    #Troubleshooting - Message "Erstelle Sicherungskopie von spgps.ini"
    Copy {%MNPath% \ "spgps.ini"}, {%ScriptPath% \ "spgps.ini"}, 1
    EndIf
    EndSub

  • Hi


    Du schreibst: Zitat: Im Anhang findet Ihr ein kleines Mort-Script, das die wichtigen INI-Dateien vom MEDION-Navigator5.1 bzw. vom Navigon Mobile Navigator 5.1 bei jedem Start in das Scriptverzeichnis sichert.


    Die Inis werden aber doch nur beschädigt, wenn auf langsamen SD Cards installiert wurde. bzw. wenn man das Gerät zu früh ausschaltet.


    Dann ist sind die Ini-Dateien eh beim einschalten defekt.


    Im Betrieb und beim starten kann man eigentlich keine Inis zerstören.


    vlG bab

    ;) bab

  • Ja, schon richtig. Aber der Trick dabei ist ja, dass nicht einfach IMMER ein Backup gemacht wird, sondern nur, wenn die Datei zu diesem Zeitpunkt noch OK ist. Wenn DANACH, also nach dem ersten Backup beim Ausschalten eine INI beschädigt wird, hast du ja schon ein gutes Backup, mit dem dann die beschädigte INI überschieben wird. Also nochmal, es wird VOR dem Backup geschaut, ob die INI OK ist, wenn ja, wird ein Backup gemacht, wenn nicht (INI wurde beim letzten ausschalten beschädigt), wird automatisch das letzte gute Backup zurückgeschrieben. Das Script muss also zumindest beim ersten Mal ein Backup von allen Dateien erstellen können (alle INIs OK), danach ist das INI Problem Geschichte.


    Gruß, Argasha

  • Hi Argasha,


    die Sicherung habe ich in meinem Script 4.0 schon drin ;)
    Allerdings bin ich mir nicht sicher, ob eine defekte Ini-Datei immer "leer" ist.
    Du schaust, ob die Sections am Ende der Inidatei gefüllt sind - was ist aber, wenn am Anfang oder in der Mitte der Inidatei was fehlt?
    Jede einzelne Ini-Section zu prüfen schien mir ein wenig zu "oversized" für eine Backup-Option in einem Script, welches eigentlich andere Aufgaben erfüllen soll.
    Ich denke, wir sollten mal freundlich bei Mort nachfragen, ob er nicht eine Art "Compare-Funktion" analog dem guten, alten DOS-Comp in MortScript einbaut :gap

  • Zitat

    Original von zappa
    Hi Argasha,


    die Sicherung habe ich in meinem Script 4.0 schon drin ;)
    Allerdings bin ich mir nicht sicher, ob eine defekte Ini-Datei immer "leer" ist.
    ....


    Hi


    Du hast recht, die inis sind nicht immer komplett leer, wenn sie defekt sind.


    vlG bab

    ;) bab

  • Hi Zappa


    ja nee, iss klar ;) Nu dachte ich mal, ich habe eine gute Idee und dann DAS :-D)


    Aber wie ich das sehe, prüfst Du ja überhaupt nicht, ob die Datei OK ist. Deine Backup-Funktion würde demnach auch 0-Byte Dateien kopieren. Dafür macht du allerdings zwei Backup-Dateien.


    Ich kann jetzt nur von meiner Erfahrung sprechen. Bei 2 mal defekter prefs.ini und ein mal defekter Navlib.ini war die Dateilänge IMMER 0 Byte.
    @ BAB hast Du selber mal den Effekt gehabt, das eine Datei nur inhaltlich falsch war, oder wo kann man das nachlesen? Dann müsste man eventuell mehrere Stichproben pro Datei machen, oder auf einen Compare-Befehl für Mortsript warten. Auf jeden Fall ist das so besser als gar kein Backup, denn wenn das Script in der jetzigen Version feststellt, das die Datei platt ist, dann ist sie wirklich platt. Sollte ein Inhaltlicher Fehler irgendwo anders auftreten, würde lediglich ein "schlechtes" Backup gemacht, also kein Problem, da das ja auf Grund der Abfrage niemals eine "gesunde" INI überschreiben könnte.


    Gruß, Argasha

  • Zitat

    Original von Argasha
    ,,,,,,,,,,,
    @ BAB hast Du selber mal den Effekt gehabt, das eine Datei nur inhaltlich falsch war, oder wo kann man das nachlesen? ........


    Gruß, Argasha


    Hi


    Geh mal auf die Suche hier, nach der SPGPS.ini


    vlG bab

    ;) bab


  • eben...


    hatte ich auch schon --> immer nach ca. 30 Minuten war der Arbeitsspeicher "leergefressen" X(


    prefs-sicherung zurückkopiert, wieder alles paletti :)

    Roland


    Tauchen macht dumm und gleichgültig...
    Ich weiß zwar nicht warum, aber es ist mir egal :rolleyes:

  • Hallo Argasha,
    das mit dem Mort Script finde ich super. da habe ich gestern gleich mal ein bißchen rumgespielt. Danke für den Tipp.


    Ich mache es aber so, dass ich immer das Proggi StartNavi benutze, welches alle Ini-Dateien beim Start auf read only setzt.
    Ich habe nämlich Navigon auf der Speicherkarte und beende die Navigation eigentlich meistens mit einem Softreset des PPC. Ich hatte damit noch nie Probleme.


    Wozu ich aber Mort Script jetzt benutzen will ist, bestimmte Programme zu stoppen bevor ich NaviStart mit MortSript starte. z.B Wisbar oder auch PocketBreeze. Die fressen zusammen 4 MB - 5 MB Haupspeicher. Das muss ja nicht sein.


    Das beenden von Wisbar z.B. ist sehr einfach:
    ...
    if procExists "wisBarAdv2.exe"
    Kill "WisBarAdv2.exe"
    endif
    ...


    Bei PocketBreeze aus dem heute-Bildschirm herausnehmen, habe ich aber so meine Probleme. Das Ausknippsen in der Registry geht ja noch recht einfach:
    ...
    RegWriteDWord HKLM, Software\Microsoft\Today\Items\PocketBreeze, Enabled, 0
    ...


    Was ich aber nicht hinbekomme ist, dass der heute Bildschirm jetzt einen refresh macht und damit Pocket Breeze wirklich vom heute Bildschirm entfernt.


    Weißt Du wie das geht ?


    Gruß lpop

  • Du solltest aber besser den Befehl CLOSE, statt KILL verwenden ;D



    vielleicht hilft das auch beim Heute-Schirm

    Roland


    Tauchen macht dumm und gleichgültig...
    Ich weiß zwar nicht warum, aber es ist mir egal :rolleyes:

  • hallo rmzahn,
    Close funktioniert bei wisbar nicht. habe ich probiert.


    Bei pocketbreeze verhält es sich sowieso ganz anders, da hier über die registry gegangen wird. Da wird nur ein Häckchen gesetzt bzw, herausgenommen. So wie wenn man über Einstellungen-> today geht und dort die Sachen ankreuzt die man auf dem heute bildschirm eben sehen will. Wenn man dann aber hier wieder herausgeht wird automatisch der heute bildschirm refresht und somit neu aufgebaut.


    Und das krieg ich mit dem mortscript nicht hin.



    gruß lpop

  • du kannst doch auch Mausklicks mit MORT simulieren...


    also sollte das gehen ;D

    Roland


    Tauchen macht dumm und gleichgültig...
    Ich weiß zwar nicht warum, aber es ist mir egal :rolleyes:


  • Hi,
    probier mal diese Zeilen an die Stelle im Script einzufügen, nachdem Du den Reg-wert geändert hast:


    Run "\windows\ctlpnl.exe","cplmain.cpl,13,1"
    WaitFor Einstellungen, 5
    Sleep 500
    Close Einstellungen


    Gruß, Argasha

  • hallo Argasha,
    cool. funktioniert. danke.


    Wo hast du diese Infos bloß her ?


    Gruß lpop