Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Re: 'Deinstallieren'-Befehl im Startmenü anlegen - geht das?

0 views
Skip to first unread message

Herfried K. Wagner [MVP]

unread,
Apr 27, 2005, 7:06:20 PM4/27/05
to
Hallo René!

"Tharion" <Tha...@discussions.microsoft.com> schrieb:
> kann ich in einem Weitergabe-Projekt, das ich mit Visual Studio .NET 2002
> erstelle, im Startmenü auch einen Befehl zum Deinstallieren der Software
> anlegen? Ich habe dazu leider weder in der Microsoft-Datenbank noch in den
> Newsgroups etwas gefunden.
>
> Wie sieht das in Visual Studio .NET 2003 aus?

Nicht anders. Software sollte über "Start" -> "Systemsteuerung" ->
"Software" deinstallierbar sein. Einträge zur Deinstallation von Software
haben im Startmenü nichts verloren ;-).

--
M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://classicvb.org/petition/>

Tharion

unread,
Apr 28, 2005, 3:44:01 AM4/28/05
to
Hallo,

"Herfried K. Wagner [MVP]" schrieb:

> Hallo René!
>
> "Tharion" <Tha...@discussions.microsoft.com> schrieb:
> > kann ich in einem Weitergabe-Projekt, das ich mit Visual Studio .NET 2002
> > erstelle, im Startmenü auch einen Befehl zum Deinstallieren der Software
> > anlegen? Ich habe dazu leider weder in der Microsoft-Datenbank noch in den
> > Newsgroups etwas gefunden.
> >
> > Wie sieht das in Visual Studio .NET 2003 aus?
>
> Nicht anders. Software sollte über "Start" -> "Systemsteuerung" ->
> "Software" deinstallierbar sein. Einträge zur Deinstallation von Software
> haben im Startmenü nichts verloren ;-).

Warum nicht? Ich sehe das als Service für den Kunden. Es gibt genügend
Programme, die in ihrem Unterordner im Startmenü auch einen Menüeintrag zum
Deinstallieren haben. Gerade bei Demo-Versionen ist das ein schönes Feature,
weil ich diese Demo dann schnell und einfach wieder los werde.

Die von dir genannte Methode ist für viele Nutzer schon zu umständlich. Wenn
ich da eine Deinstallation für Windows 98, Windows 2000 und Windows XP
beschreibe (und das muss ich, denn in allen drei Versionen sind die
Arbeitsschritte unterschiedlich), dann gibt es genügend Anwender, die schon
Probleme damit haben, die für sie passene Beschreibung zu finden.

Also wenn es so eine Möglichkeit gibt, würde ich sie gerne nutzen - im
Interesse meiner Kunden.

Viele Grüße,
René Schwab

Günter Prossliner

unread,
Apr 28, 2005, 4:57:50 AM4/28/05
to
> kann ich in einem Weitergabe-Projekt, das ich mit Visual Studio .NET
> 2002 erstelle, im Startmenü auch einen Befehl zum Deinstallieren der
> Software anlegen? Ich habe dazu leider weder in der
> Microsoft-Datenbank noch in den Newsgroups etwas gefunden.

Es kann sein, dass es eine MSI - Lösung gibt. Ich bin kein MSI - Experte
also kann ich Dir das nicht sagen. Was allerdings möglich ist, ist die
Verknüpfung nach der Installation händisch zu erstellen (z.B. über ein
.vbs).

Dazu suchst Du Dir den Registry-Eintrag Deines Programms raus
(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\<DeineAnwendung>

Der Wert "UninstallString" ist die Kommandozeile des Unistallers. Diese
verwendest Du als Ziel Deiner Verknüfung.

Wenn Dir der Weg über ein .vbs zu umständlich ist, kannst Du auch ein
kleines C# Programm schreiben, das als Uninstall - Laucher fungiert. Auf das
kannst Du dann ganz normal eine Verknüfung erstellen.

z.B. (untested und ohne ErrorHandling!)

using System;
using Microsoft.Win32;
using System.Diagnostics;

static void Main()
{
RegistryKey k = Registry.LocalMachine.OpenSubKey(
@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\<DeineAnwendung>"
);

string uninstaller = k.GetValue("UninstallString") as string;
k.Close();

Process.Start(uninstaller);
}

mfg GP


Conrad@discussions.microsoft.com Stephan Conrad

unread,
Apr 28, 2005, 11:36:09 AM4/28/05
to

"Tharion" wrote:

> Hallo Günther,
>
> Dein Hinweis war genau das, was ich gesucht habe. Vielen Dank.
>
> Ich habe das Problem jetzt mit dem von Dir vorgeschlagenen kleinen Programm
> gelöst. Es waren zwar noch einige Modifikationen notwendig, aber nachdem Du
> mir die Richtung gezeigt hattest, waren die kein Problem mehr.
>
> Vielen Dank.
> René
>
> PS: Falls Interesse daran besteht, kann ich den kompletten Programmcode hier
> veröffentlichen.
> Also falls den jemand haben möchte, hier melden.
>
Hallo,

ja ich wäre an dem code interesiert.

mfg stephan

Carsten Posingies

unread,
Apr 28, 2005, 12:00:32 PM4/28/05
to
Tharion wrote:
> Ich habe das Problem jetzt mit dem von Dir vorgeschlagenen kleinen
> Programm gelöst.

Wie löschst Du am Ende das Programm selbst?


Tharion

unread,
Apr 28, 2005, 1:44:02 PM4/28/05
to
Hallo,

hier ist der Code. Ich hoffe, Du kannst etwas damit anfangen.
Ich bin mir nicht sicher, ob ich alle Eventualitäten abgefangen habe, aber
die meisten Fehlerquellen sollten abgedeckt sein.
__________________________

using System;
using System.Windows.Forms;
using Microsoft.Win32;
using System.Diagnostics;

namespace UZV_Uninstall
{
/// <summary>
/// Zusammendfassende Beschreibung für Class1.
/// </summary>
class Class1
{
/// <summary>
/// Der Haupteinstiegspunkt für die Anwendung.
/// </summary>
[STAThread]
static void Main( string[] args)
{
string uninstaller, param;
int pos;
uninstaller = "";
param = "";
RegistryKey k = Registry.LocalMachine.OpenSubKey(
@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\<MeineAnwendung>");
// <MeineAnwendung> war in meinem Fall der Produktcode in geschweiften
KLammrn, also z.B.:
// {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
if (k != null)
{
// Wert aus Registrierung auslesen


uninstaller = k.GetValue( "UninstallString") as string;

// Den String in aufzurufendes Programm und Parameter aufspalten.
// Beides ist im String durch ein Leerzeichen voneinander getrennt.
pos = uninstaller.IndexOf( " ");
param = uninstaller.Remove( 0, pos + 1);
uninstaller = uninstaller.Remove( pos, uninstaller.Length - pos);
// Vor den Programmnamen noch den absoluten Pfad setzen.
uninstaller = Environment.GetFolderPath(
Environment.SpecialFolder.System) + "\\" + uninstaller;
k.Close();
}
if (uninstaller == "")
MessageBox.Show( "Fehlermeldung, dass Deinstallation nicht
funktioniert hat.",
"Deinstallation nicht erfolgreich.",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
else
{
try
{
Process.Start( uninstaller, param);
}
catch
{
MessageBox.Show( "Fehlermeldung, dass Deinstallation nicht
funktioniert hat.",
"Deinstallation nicht erfolgreich.",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
}
}
}
___________________________

Viele Grüße,
René Schwab

Thorsten Dörfler

unread,
Apr 28, 2005, 5:27:31 PM4/28/05
to
Günter Prossliner schrieb:

>> kann ich in einem Weitergabe-Projekt, das ich mit Visual Studio .NET
>> 2002 erstelle, im Startmenü auch einen Befehl zum Deinstallieren der
>> Software anlegen? Ich habe dazu leider weder in der
>> Microsoft-Datenbank noch in den Newsgroups etwas gefunden.
>
> Es kann sein, dass es eine MSI - Lösung gibt.

Ja, die gibt es. Zumindest hatte ich eine solche mal für den VSI 1.0
gepostet. Aber eben eine MSI Lösung, die auch im VS.NET Installer
nicht zugänglich ist. Zur Bearbeitung der finalen MSI-Datei wird der
Orca Datenbank Editor benötigt:

How To Use the Orca Database Editor to Edit Windows Installer Files
http://support.microsoft.com/?scid=kb;en-us;255905

<copy&paste>
Lege im VSI ganz normal eine Verknüpfung an, wie auch die Verknüpfung
zu Deinem Programm, verlinke sie mit Deinem Programm, benenne sie
entsprechend "Reparieren oder entfernen", "Deinstallieren" oder wie es
gerade beliebt ähnlich und weise ihr gewünschtes Icon zu.

Nun erstellst Du das Installer Package.

Für die nächsten Schritte benötigst Du den "Orca Database Editor":

Mit diesem öffnest Du soeben erstelltes Installer Package. Öffne hier
die Tabelle "Shortcut" und suche nach einen Eintrag, der unter der
Spalte "Name", den Namen deiner "Reparieren oder entfernen" -
Verknüpfung enthält.

In der Spalte "Target" dieses Eintrags trägst Du folgendes ein:
[SystemFolder][MsiexecProp]

Unter "Arguments" folgendes:
/i [ProductCode]

Zum Schluss musst Du noch in der Tabelle "Property" eine neue
Eigenschaft hinzufügen (Tables => Add Row...). Im Feld "Property"
trägst Du "MsiexecProp" ein (ohne ""), unter "Value" "MsiExec.exe"
(ebenfalls ohne "").

Speichern und fertig!

Alle Werte in eckigen Klammern, werden während der Installation vom
MSI mit den entsprechenden Systemparametern, bzw. den Werten aus der
'Property'-Tabelle ersetzt.
</copy&paste>

Thorsten Dörfler
--
vb-hellfire - einfach anders
http://www.vb-hellfire.de/

0 new messages