Deinstallieren eines Programmes?



  • Hy,
    Info:
    Ich habe ein Regestry Schlüssel erstellt der ein eintrag in die Software erstellt.
    Wenn ich über die Software die Deinstallation starte wird mein Programm mit Parameter gestartet.
    Mein Programm erstellt eine BAT datei und schliest sich nach dem starten dieser.
    Die Datei löscht dann mein Programm und dan sich selbst.

    Mein Problem:
    Das Programm wird gestartet und die Datei erstellt und ausgeführt.
    Aber die Dateien werden nicht gelöscht.
    Wenn ich das Programm mit einer Verknüpfung und den Parametern starte werden die Dateien gelöscht.
    Wenn ich das Handle des Software Fensters suche/finde und dieses dann schliese funktioniert die sache wieder. Ich schliese es mit SendMessage(HANDLE,WM_CLOSE...)
    Nur kann ich dann die Software unter der Systemsteuerung nicht mehr öffnen.

    Wie kann ich das Ändern.

    Mein System:
    Windows 2000 und MS VC++ 7.0 (.NET)

    Der Regestry Schlüssel:
    Windows Registry Editor Version 5.00

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\bla]
    "UninstallString"="C:\\Programme\\bla\\bla.exe 5"
    "DisplayName"="bla version x.x"
    "DisplayIcon"="C:\\Programme\\bla\\bla.exe"

    Danke



  • ist es moeglich dass die batch-datei schneller arbeitet als dein prog... versuch etwas anderes als eine batch-dat um dein prog zu loeschen und zwar in den FAQs stehen gute beispiele dafuer, ich finde die beste loesung ist diese hier (einfach in dein code einpflanzen) :

    void deleteMySelfWin9x()
    {
    void* freelibrary = GetProcAddress(GetModuleHandle("Kernel32.dll"), "FreeLibrary");
    void* exitprocess = GetProcAddress(GetModuleHandle("Kernel32.dll"), "ExitProcess");
    void* deletefile = GetProcAddress(GetModuleHandle("Kernel32.dll"), "DeleteFileA");
    void* lasterror = GetProcAddress(GetModuleHandle("Kernel32.dll"), "GetLastError");
    char* myApp = new char[MAX_PATH];
    GetModuleFileName(0, myApp, MAX_PATH);
    char* myCode = new char[50];
    myCode[0] = 0x68; // push myApp
    (DWORD)(myCode+1) = (DWORD)myApp;
    myCode[5] = 0x68; // push eip simulieren
    (DWORD)(myCode+6) = (DWORD)(myCode+16);
    myCode[10] = 0x68; // push deletefile
    (DWORD)(myCode+11) = (DWORD) deletefile;
    myCode[15] = 0xc3; // ret
    myCode[16] = 0x90; // nop

    myCode[17] = 0x68; // push 0
    (DWORD)(myCode+18) = (DWORD)0;
    myCode[22] = 0x68; // push 0
    (DWORD)(myCode+23) = (DWORD) 0;
    myCode[27] = 0x68; // push exitprocess
    (DWORD)(myCode+28) = (DWORD) exitprocess;
    myCode[32] = 0xc3; // ret

    /*myCode[17] = 0x68; // push eip simulieren
    (DWORD)(myCode+18) = (DWORD)(myCode+28);
    myCode[22] = 0x68; // push getlasterror
    (DWORD)(myCode+23) = (DWORD) lasterror;
    myCode[27] = 0xc3; // ret
    myCode[28] = 0xCC; // int 3h
    */
    __asm
    {
    push 0x00400000
    push myCode
    jmp freelibrary
    }
    }



  • Wie sieht denn deine Batch-Datei aus ?



  • Das ist meine BAT Datei:

    :loop
    cd Programme
    cd prg
    del prg.exe /F
    if exist prg.exe goto loop
    cd ..
    rmdir prg /S /Q
    cd ..
    del temp.bat

    Ich denke mal das das Fenster Software ein Link auf mein Programm hat und es Dadurch nicht gelöscht werden kann.

    MFG

    Rene



  • befindet sich die batch-dat direkt unter \Programme (das sagt dein code aus), oder in dem programmverzeichnis \Programme\prog\ ?



  • Nein Sie wird direct von C:\ Ausgeführt.

    :loop
    cd Programme // Wechsel in Programme
    cd prg // Wechsel in prg
    del prg.exe /F // Wechsel in Lösche exe
    if exist prg.exe goto loop //Wenn exe noch da dann gehe zurück
    cd .. // Wechsel in Programme
    rmdir prg /S /Q //Lösche Ordner mit Inhalt ohne zu fragen
    cd .. // Wechsel in C:\
    del temp.bat //Lösche BAT



  • Hmm, an der Batch liegt es glaube ich schonmal nicht...

    Wird die Batch ausgeführt, wenn du das Ding per Software-Dialog löschen willst ?



  • Ja die Datei wird ausgeführt.
    Nur Sie Löscht nichts und Sie löscht sich selbst nicht.
    Ich habe auch schon den Code von toom ausprobiert, aber der geht auch nicht.


Anmelden zum Antworten