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 😃
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 🙁
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
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 🙁
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
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 🙁
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.
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 🙁
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
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
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