Laden...

Eigener Deinstaller

Erstellt von der-Webdesigner vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.485 Views
D
der-Webdesigner Themenstarter:in
54 Beiträge seit 2008
vor 15 Jahren
Eigener Deinstaller

Hallo zusammen!

Ich hätte gerne im Startmenü zusätzlich zu meiner eigenen Programmverlinkung einen Deinstaller, heißt bei der Installation soll die Verlinkung erzeugt werden plus ein Uninstaller. Gibt es die Möglichkeit, sowas direkt über VS2005 zu erzeugen? Denn bei einem Rechtsklick auf das Projekt kann ich mein Programm direkt deinstallieren, wobei er dabei das normale Setup nimmt. Das Setup ist nach der Installation aber für gewöhnlich nicht mehr verfügbar, da das Programm ja dann fertig installiert ist. Als einzige Möglichkeit bleibt daher momentan die Deinstallation über die Systemsteuerung. Ich hätte aber gerne einen eigenen Deinstaller, mit dem die Deinstallation ohne den "Umweg" über die Systemsteuerung möglich ist.

Kann man sowas einfach selbst entwickeln oder gibt es da etwas "Vordefiniertes", was ich direkt aus VS2005 erzeugen könnte?

Lg und vielen Dank,
Manuel 😃

1.820 Beiträge seit 2005
vor 15 Jahren

Hallo!

Du könntest ein Batch-Skript erstellen, welches mittels msiexec und dem Produktcode die Deinstallation durchführt. Dann könntest du das Skript als Startmenü-Verweis hinzufügen.

Oder du schreibst einen eigenen Deinstaller, der dann auch zusätzliche Interaktion mit dem Benutzer ermöglichen würde.

Nobody is perfect. I'm sad, i'm not nobody 🙁

D
der-Webdesigner Themenstarter:in
54 Beiträge seit 2008
vor 15 Jahren

Hallo!

Danke für deine schnelle Antwort.
Das mit der Batch-Datei hatte ich eben mal ausprobiert und das scheint auch soweit zu funktionieren, aber ich würde gerne noch zusätzlich ein paar Dinge ausführen bzw. löschen, die das Setup nicht kennt.
Also habe ich mir gerade mal zum testen ein eigenes Programm geschrieben und aus dem Programm raus führe ich dann Msiexec aus. Dann schmiert er aber am Schluss der Deinstallation immer ab und sagt, dass der Prozess noch ausgeführt wird. Er kann dann den Ordner meines Programms nicht löschen. Alle Dateien sind weg, nur der Ordner bleibt jedes Mal.

Hier der Code den ich für meinen Uninstaller verwende:

static void Main()
{
    string productCode = "{...}";
    string path = Environment.GetFolderPath(Environment.SpecialFolder.System);
    Process proc = new Process();
    proc.StartInfo.FileName = string.Concat(path, "\\msiexec.exe");
    proc.StartInfo.Arguments = string.Concat(" /x ", productCode);
    proc.Start();
    proc.WaitForExit();

    string applicationPath = Environment.CurrentDirectory.ToString();
    // hier soll der Ordner gelöscht werden, weil der irgendwie noch da ist, warum auch immer
    Directory.Delete(applicationPath,true);
}

Vielen Dank für jegliche Hilfe!
Manuel

1.820 Beiträge seit 2005
vor 15 Jahren

Hallo!

Dann könnte man noch folgendes machen:
Für die Deinstallation werden zwei Programme geschrieben:
Eines enthält als Resource das eigentliche Deinstallationsprogramm, welches in den Temp-Ordner geschrieben und dort gestartet wird. Nach dem Start wird dann das Erste beendet. Dadurch ist die Datei nicht mehr gesperrt. Allerdings bleibt dann im temp-Ordner der Deinstaller zurück. Dafür könnte man höchstens noch in der Registry im RunOnce-Zweig einen delete-Befehl anlegen.

Nobody is perfect. I'm sad, i'm not nobody 🙁

D
der-Webdesigner Themenstarter:in
54 Beiträge seit 2008
vor 15 Jahren

Hi du!

Das ist auf jeden Fall eine gute Idee mit der es gehen könnte. Aber wie machen es denn andere Programme? Sonst müsste ich irgendwann ja mein Temp-Verzeichnis voll von Deinstallern haben oder nicht?
Interessant finde ich jedenfalls, dass sich der Deinstaller selbst löschen kann während er läuft, der Ordner bleibt aber. Das finde ich irgendwie merkwürdig 😉

Danke auf jeden Fall für deine Hilfe! 😃
Manuel

1.820 Beiträge seit 2005
vor 15 Jahren

Hallo!

Andere Programme machen das evtl. über einen msiexec-Aufruf mit Parametern direkt im Startmenü-Eintrag, die meisten rufen aber auch nur ein Uninstaller-Tool im Programm-Verzeichnis auf.

Nobody is perfect. I'm sad, i'm not nobody 🙁

D
der-Webdesigner Themenstarter:in
54 Beiträge seit 2008
vor 15 Jahren

Aber die mit dem Uninstaller-Tool dürften doch dann das gleiche Problem wie ich haben, so dass der Ordner nicht mitgelöscht wird weil das Tool in dem Ordner ja noch ausgeführt wird.

1.820 Beiträge seit 2005
vor 15 Jahren

Hallo!

Diese Uninstaller könnten es genauso machen, wie ich es oben beschrieben habe:
Vorbereitende Aufgaben erledigen, anschließend msiexec mit Parametern aufrufen und sich nach dem Aufruf sofort beenden.

Nobody is perfect. I'm sad, i'm not nobody 🙁

D
der-Webdesigner Themenstarter:in
54 Beiträge seit 2008
vor 15 Jahren

Hallo!

Leider funktioniert auch das nicht, so dass der Ordner noch immer bleibt. Nach dem Aufruf von Msiexec rufe ich sofort Application.Exit() auf, so dass mein Programm (der Uninstaller) noch vor der Installationsroutine beendet ist.

Gibt es noch andere Möglichkeiten?

Vielen Dank für die Hilfe!
Manuel

691 Beiträge seit 2007
vor 15 Jahren

Moin. Wie wärs wenn du als Installer NSIS verwendest?
http://nsis.sourceforge.net/Main_Page

Da kannst du auch schön einen Deinstaller mitreinbasteln.
Vereinfacht z.B. So:
http://nsis.sourceforge.net/Simple_tutorials#Simple_installer_and_uninstaller_with_start_menu_item

mit freundlichen Grüßen,
Tomot

Projekte: www.gesellschaftsspieler-gesucht.de

D
der-Webdesigner Themenstarter:in
54 Beiträge seit 2008
vor 15 Jahren

Danke für die Links! Habs mir mal angeschaut und es wäre jetzt natürlich schon nochmals ein großer Aufwand sich in diese "Scriptsprache" einzulesen...es wundert mich nur, dass es scheinbar mit dem Setup-Projekt von VS einfach nicht machbar ist...oder sehe ich das falsch?

Lg,
Manuel