Zum Inhalt springen

VB.NET Programm soll sich selbst löschen


strico

Empfohlene Beiträge

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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);

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...