strico Geschrieben 14. Juni 2006 Teilen 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Bubble Geschrieben 14. Juni 2006 Teilen 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
strico Geschrieben 19. Juni 2006 Autor Teilen 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Bubble Geschrieben 19. Juni 2006 Teilen 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
strico Geschrieben 19. Juni 2006 Autor Teilen 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Bubble Geschrieben 19. Juni 2006 Teilen 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
strico Geschrieben 19. Juni 2006 Autor Teilen 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Bubble Geschrieben 19. Juni 2006 Teilen 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
strico Geschrieben 19. Juni 2006 Autor Teilen 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Bubble Geschrieben 19. Juni 2006 Teilen 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
strico Geschrieben 19. Juni 2006 Autor Teilen 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
afrokalypse Geschrieben 19. Juni 2006 Teilen Geschrieben 19. Juni 2006 schau mal nach inno setup Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Bubble Geschrieben 19. Juni 2006 Teilen 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); } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
strico Geschrieben 20. Juni 2006 Autor Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.