Laden...

Cold Boot per Software?

Erstellt von benji vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.819 Views
B
benji Themenstarter:in
6 Beiträge seit 2008
vor 15 Jahren
Cold Boot per Software?

Hallo zusammen,

Ich weiß nicht ob ich hier im richtigen Forum bin, also bitte nicht schimpfen 😉

Es geht um folgendes. Ich habe für einen Datalogic Memor Handscanner (Windows CE 5) ein SmartDeviceProject in C# geschrieben.

Zusätztlich gibt es eine automatische Updatefunktion, welche das aktuelle Programm beendet, die neuen Daten aus dem WLAN kopiert und nach erfolgreichem Kopieren den Scanner neu startet.

Leider ist dieser Neustart nur ein sog. Warm-Boot. Hierbei läuft mir der Speicher voll und nach 3 - 4 Updates kann man das Scanner-Programm nicht mehr starten weil zu wenig Speicher zu Verfügung steht.
Der Code hierfür:


[DllImport("coredll.dll")]
        public static extern int KernelIoControl(int dwIoControlCode, IntPtr lpInBuf, int nInBufSize, IntPtr lpOutBuf, int nOutBufSize, ref int lpBytesReturned);

private static int CTL_CODE(int DeviceType, int Func, int Method, int Access)
{
        return (DeviceType << 16) | (Access << 14) | (Func << 2) | Method;
}

private static int ResetPocketPC()
{
    const int FILE_DEVICE_HAL = 0x101;  
    const int METHOD_BUFFERED = 0;
    const int FILE_ANY_ACCESS = 0;
    int bytesReturned = 0;
    int IOCTL_HAL_REBOOT;
    IOCTL_HAL_REBOOT = CTL_CODE(FILE_DEVICE_HAL, 15, METHOD_BUFFERED, FILE_ANY_ACCESS);

    return KernelIoControl(IOCTL_HAL_REBOOT, IntPtr.Zero, 0, IntPtr.Zero, 0, ref bytesReturned);

}

Es gibt allerdings noch eine zweite Möglichkeit. Nämlich den sog. Cold-Boot. Hierbei hätte ich keinerlei Speicherprobleme da er ja gelöscht wird.
Mein Problem ist jetzt, dass ich nicht weiß wie ich diesen Cold-Boot per Software auslösen kann. Ich habe zwar noch zusätzlichen Code



        [DllImport("coredll.dll")]
        extern static void SetCleanRebootFlag();

            SetCleanRebootFlag();

versucht, jedoch wird mir hier mein kompletter Scanner zurückgesetzt, was ich ja nicht will.

Kann mir hier vielleicht noch jemand nen Tipp geben? Wäre super...

Vielen Dank im Voraus!!!!

P.S. Man kann den Warm-/Cold-Boot auch per Tastatur ansteuern, was aber für den Anwender zu kompliziert wird. Die Tasten hierfür wären:
Cold-Boot: Steuerkreuz + ESC + Power
Warm-Boot: ESC + Power

0
767 Beiträge seit 2005
vor 15 Jahren

P.S. Man kann den Warm-/Cold-Boot auch per Tastatur ansteuern, was aber für den Anwender zu kompliziert wird. Die Tasten hierfür wären:
Cold-Boot: Steuerkreuz + ESC + Power
Warm-Boot: ESC + Power

Versuch diese mal mit SendKeys.Send() zu simulieren... vielleicht hilft das.

loop:
btst #6,$bfe001
bne.s loop
rts

B
benji Themenstarter:in
6 Beiträge seit 2008
vor 15 Jahren

Hm wäre ne Möglichkeit, nur leider find ich nirgends welchen Code der Power-Knopf bzw. das Steuerkreuz hat...

Trotzdem danke für deine Mühe...