strico Geschrieben 14. Juni 2006 Geschrieben 14. Juni 2006 Hallöchen. Wie kann ich ein Programm dazu veranlassen, sich selbst zu löschen? So lange es ausgeführt wird, gibt es keinen Lösch-Zugriff auf sich selbst.
Bubble Geschrieben 14. Juni 2006 Geschrieben 14. Juni 2006 Wie kann ich ein Programm dazu veranlassen, sich selbst zu löschen? Gar nichr. Das kann nur ein anderes Programm tun, und auch nur, wenn die Dateien nicht mehr im Gebrauch sind.
strico Geschrieben 19. Juni 2006 Autor Geschrieben 19. Juni 2006 Vielleicht hat einer von euch ne Idee: Ich schreibe nen Deinstallations-Tool. Die von .NET angebotenen Setup-Projekte kann ich nicht gebrauchen bzw weiß nicht wie ich die so konfiguriere, wie ichs brauche. (andere Oberfläche, verschiedene weitere Einstellungen) Vielleicht gibt es eine Möglichkeit ein Programm komplett aus dem RAM ausführen zu lassen, dass dann keinen Zugriff mehr auf die Datei auf der Festplatte benötigt??? Vielleicht hat auch einer von euch eine gute Idee, wie ich nach der Deinstallation das Deinstall-Tool wegbekomme.
Bubble Geschrieben 19. Juni 2006 Geschrieben 19. Juni 2006 Ich schreibe nen Deinstallations-Tool. Nimm lieber eine fertige und sicher funktionierende Lösung. Vielleicht hat auch einer von euch eine gute Idee, wie ich nach der Deinstallation das Deinstall-Tool wegbekomme. Beim nächsten Windows-Start löschen lassen.
strico Geschrieben 19. Juni 2006 Autor Geschrieben 19. Juni 2006 Wenn ich eine fertige Lösung nehme, bin ich im Funktionsumfang eingeschränkt. Wie soll das Programm beim Windowsstart gelöscht werden?
Bubble Geschrieben 19. Juni 2006 Geschrieben 19. Juni 2006 Wenn ich eine fertige Lösung nehme, bin ich im Funktionsumfang eingeschränkt. Du wirst den Funktionsumfang vom Windows-Installer IMO nie selbst erreichen, es sei denn, Du willst Dich noch sehr sehr lange mit einem eigenen Installer beschäftigen. Wie soll das Programm beim Windowsstart gelöscht werden? In der Registry zum Löschen eintragen. Den Registry-Key musst Du selbst raussuchen, hab' ich nicht im Kopf (könnte auch sein, dass es kein eigener Key war, sondern RunOnce verwendet werden muss). Oder nimm MoveFileEx mit dem Flag MOVEFILE_DELAY_UNTIL_REBOOT.
strico Geschrieben 19. Juni 2006 Autor Geschrieben 19. Juni 2006 Das mit der Registry werd ich nachforschen, vielen DANK. Nochmal zu dem Installer. Er besitzt verschiedene Sachen nicht, die ich beim installieren brauche, bzw ich weiß nicht wie ich eigenen Code rein bringe. Des weiteren ist der eigene Installer schon komplett funktionstüchtig.
Bubble Geschrieben 19. Juni 2006 Geschrieben 19. Juni 2006 ich hab meine vorige Anwort noch ergänzt, vielleicht hilft es Dir weiter. Er besitzt verschiedene Sachen nicht, die ich beim installieren brauche, bzw ich weiß nicht wie ich eigenen Code rein bringe. Du kannst eigene Aktionen (Custom Actions) ausführen lassen.
strico Geschrieben 19. Juni 2006 Autor Geschrieben 19. Juni 2006 Kannst du mir das mit den Custom Actions kurz erläutern? (Visual Studios 2005 VB.NET) Kann man in den Installer auch eigene Formulare einfügen? Ich hab nämlich 2 Checkboxen zusätzlich im Gebrauch.
Bubble Geschrieben 19. Juni 2006 Geschrieben 19. Juni 2006 Da Du .NET verwendest, schau Dir die Installer Class an. Man kann auch zusätzliche Dialoge einfügen. Wenn Du mehr Komfort beim Erstellen brauchst, dann gibt es zusätzliche Programme, mit denen man Setups bauen kann. Wenn Du bestimmte Fragen hast, dann stell sie ruhig. Vielleicht könnte man darüber auch ein Tutorial schreiben, obwohl es bestimmt schon dutzende Tutorials zu dem Thema gibt.
strico Geschrieben 19. Juni 2006 Autor Geschrieben 19. Juni 2006 Das mit dem MoveFileEx hab ich ausprobiert noch und nöcher. Es kommt immer wieder eine Fehlermeldung. Ein Aufruf an die PInvoke-Funktion "Deinstall!Deinstall.F_OptiDeSetup::MoveFileEx" hat das Gleichgewicht des Stapels gestört. Wahrscheinlich stimmt die verwaltete PInvoke-Signatur nicht mit der nicht verwalteten Zielsignatur überein. Überprüfen Sie, ob die Aufrufkonvention und die Parameter der PInvoke-Signatur mit der nicht verwalteten Zielsignatur übereinstimmen. Public Declare Function MoveFileEx Lib "kernel32" _ Alias "MoveFileExA" (ByVal lpExistingFileName As String, _ ByVal lpNewFileName As String, ByVal dwFlags As Long) As Long '--------------------------- Public Const MOVEFILE_DELAY_UNTIL_REBOOT As Long = &H4 Die MoveFileEx gibt es auch mit boolean als Rückgabe. Diese hat allerding genau die gleiche Fehlermeldung geworfen.
Bubble Geschrieben 19. Juni 2006 Geschrieben 19. Juni 2006 Das mit dem MoveFileEx hab ich ausprobiert noch und nöcher. Es kommt immer wieder eine Fehlermeldung. Probiere mal (C#): [System.Runtime.InteropServices.DllImport("kernel32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)] static extern bool MoveFileEx(string sourceFileName, string destFileName, UInt32 Flags); private bool Delete_DelayUntilReboot(string path) { return MoveFileEx(path, null, 4); }
strico Geschrieben 20. Juni 2006 Autor Geschrieben 20. Juni 2006 Ich hab festgestellt, dass das MoveFileEx nicht immer geht, vor allem nie bei meinen EXE-Dateien. Ich hab mir mal was anderes einfallen lassen: Folgendes: Ich lege vor Programmende (ggf. bei FormClosing) eine BATCH-Datei an, die ich aufrufe ... dim pfad as string dim stream as io.streamwriter pfad = "c:\test.bat" stream = New IO.StreamWriter(pfad, False) stream.WriteLine("@echo off") stream.WriteLine(":L1") stream.WriteLine("sleep 1") stream.WriteLine("del """ & Application.ExecutablePath & """ 2>nul") stream.WriteLine("if exist """ & Application.ExecutablePath & """ goto L1") stream.WriteLine("del ""test.bat"" 2>nul") stream.Close() Shell(pfad, AppWinStyle.MinimizedFocus) Die Batch-Datei versucht so lange das Programm zu schließen, bis der Zugriff darauf da ist. Dann löscht sich die Datei selbst. Danke nochmal für die Hilfe
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden