Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Inno Setup deinstallation hilfe (https://www.delphipraxis.net/55285-inno-setup-deinstallation-hilfe.html)

trivial 19. Okt 2005 07:45


Inno Setup deinstallation hilfe
 
Hallo,

kann mir einer helfen, wie ich das hinbekomme, das mein Setup erkennt, ob
das Programm schon installiert wurde.
Falls es schon installiert wurde, soll da Programm eine deinstallation anbieten.

Danke für eure Hilfe

Orbmu2k 19. Okt 2005 07:55

Re: Inno Setup deinstallation hilfe
 
Schau mal hier vieleicht hilft dir das weiter

http://innosetup.planet-source.de/in...5a1031a2d4401b

// Edit falschen Link korrigiert

trivial 19. Okt 2005 08:06

Re: Inno Setup deinstallation hilfe
 
Hi das habe ich versuch, aber irgentwie passiert da nichts.

Hier mein Prog.
schau dir das mal an.

[Setup]
AppName=Mobile-Telearbeit
AppVerName=Clientpack MobTel Aug 05
AppVersion= NCP Secure VPN/PKI Client 8.04, ISS Proventia Desktop 8.0.614.4
VersionInfoVersion=0.0.0.1
AppPublisher=LDS NRW
AppPublisherURL=http://telearbeit.nrw.de
AppSupportURL=http://telearbeit.nrw.de
AppUpdatesURL=http://telearbeit.nrw.de
DefaultDirName={pf}\MobTelInet
DisableProgramGroupPage=yes
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
WizardImageFile=".\LDS.bmp"
LicenseFile=".\Nutzung.txt"
AlwaysRestart=yes
AppID=Mobile-Telearbeit

[Languages]
Name: "ger"; MessagesFile: "compiler:Languages\German.isl"

[Files]
;Quell Dateien
;Source: ".\SecureClient\*"; DestDir: "{app}\SecureClient\"; Flags: ignoreversion recursesubdirs; Tasks: NCP
Source: ".\cacerts\*"; DestDir: "{app}\cacerts\"; Flags: ignoreversion recursesubdirs; Tasks: Cert
Source: ".\copycacerts.bat"; DestDir: "{app}\"; Flags: ignoreversion recursesubdirs; Tasks: Cert
;Source: ".\agentinstall-675.exe"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs; Tasks: Proventia


[Uninstaller]
;Filename: "{app}\uninstall_fwcontrol.bat"; Flags: runhidden waituntilterminated; StatusMsg: "Deinstalliere FWControl...";

[Run]
FileName: "{app}\SecureClient\Disk1\setup.exe"; Parameters: "-s"; Flags: waituntilterminated skipifdoesntexist; StatusMsg: "Installiere NCP Secure VPN/PKI Client..."; Tasks: NCP
FileName: "{app}\copycacerts.bat"; Flags: waituntilterminated skipifdoesntexist; StatusMsg: "Install Zertifikate"; Tasks: Cert
FileName: "{app}\agentinstall-675.exe"; Flags: waituntilterminated skipifdoesntexist; StatusMsg: "Proventia Desktop Installation"; Tasks: Proventia

[Tasks]
Name: NCP; Description: "Soll der NCP Client installiert werden?";
Name: Cert; Description: "Sollen die dazugehörigen Zertifikate importiert werden?";
Name: Proventia; Description: "Soll der Proventia Desktop installiert werden?";

[CustomMessages]
ger.installiert1=Das Programm ist bereits installiert. Deinstallation wird gestartet.
;eng.installiert1=the program is already installed. Uninstallation is going to start.
apid={80FFBE38-0040-4892-7532-F29F7DBECFF8}
[Code]
function GetPathInstalled( AppID: String ): String;
var
sPrevPath: String;
begin
sPrevPath := '';
if not RegQueryStringValue( HKLM,
'Software\Microsoft\Windows\CurrentVersion\Uninsta ll\'+AppID+'_is1',
'Inno Setup: App Path', sPrevpath) then
RegQueryStringValue( HKCU, 'Software\Microsoft\Windows\CurrentVersion\Uninsta ll\'+AppID+'_is1' ,
'Inno Setup: App Path', sPrevpath);

Result := sPrevPath;
end;

//Setup wird begonnen; Wizard nicht!
function InitializeSetup(): Boolean;
var
sPrevPath: String;
sPrevID: String;
sUninstallPath: String;
iResult: Integer;
begin
sUninstallPath := 'Mobile-Telearbeit';
//hier kommt der AppID Schlüssel hin, der unter [Setup] festgelegt wurde
//wenn keiner festgelegt, der AppName
sPrevID := ExpandConstant('{cm:apid}');

sPrevPath := GetPathInstalled( sPrevID );
Result := false;
if ( Length(sPrevPath) > 0 ) then
begin MsgBox( ExpandConstant('{cm:apid}'),mbInformation, MB_OK );
MsgBox( ExpandConstant('{cm:installiert1}'),mbInformation, MB_OK );
if not RegQueryStringValue( HKLM,
'Software\Microsoft\Windows\CurrentVersion\Uninsta ll\'+sPrevID+'_is1',
'UninstallString', sUninstallPath) then
RegQueryStringValue( HKCU, 'Software\Microsoft\Windows\CurrentVersion\Uninsta ll\'+sPrevID+'_is1' ,
'UninstallString', sUninstallPath);
begin
Delete(sUninstallPath,1,1);
Delete(sUninstallPath,Length(sUninstallPath),1);

if not Exec(sUninstallPath, '', '', SW_SHOWNORMAL, ewNoWait, iResult) then
MsgBox('Execution of ''' + sUninstallPath + ''' failed. ' + SysErrorMessage(iResult) + '.', mbError, MB_OK);
end;
end

else
begin
//zum testen eine Ausgabe
Result := true;
end;

end;

MathiasSimmack 19. Okt 2005 09:15

Re: Inno Setup deinstallation hilfe
 
Tja, dann kann vermutlich auch nichts passieren:
Zitat:

Code:
[Setup]
AppID=Mobile-Telearbeit

[CustomMessages]
apid={80FFBE38-0040-4892-7532-F29F7DBECFF8}

Du legst in deinem Code als "AppId" den Wert Mobile-Telearbeit fest. Wenn du mal in die Registry schaust, dann wirst du sehen, dass das auch dein Uninstallschlüssel ist (mit dem _is1 dran). Im Code lässt du aber nach einer GUID suchen. Das kann natürlich nicht funktionieren.
Versteh mich nicht falsch, aber du kopierst sogar die Kommentare mit in deinen Code, die eigentlich das Prinzip erklären, denkst aber nicht darüber nach. Was das Schlimmste ist: Du übernimmst die komplette GUID {80FFBE38-0040-4892-7532-F29F7DBECFF8} aus dem Forenbeitrag. :roll: Sollte der Anwender zufälligerweise das Programm von demjenigen aus dem Inno-Forum installiert haben und nun dein Setup starten, dann entfernst du das fremde Programm.

Ich gebe dir noch einen Link aus dem besagten Forum: klick. Das zeigt dir die Grundlagen einer Versionskontrolle. Das bedeutet, du kannst immer nur die jeweils aktuelle bzw. eine noch aktuellere Version installieren. Bei älteren Versionen wird das Setup mit einer Fehlermeldung abgebrochen. Außerdem steckt in der Funktion "IsSetupNewer" die Grundlage drin, die du brauchst! Wenn das Setup nämlich die Versionsnummer nicht auslesen kann, dann zeigt es dir immerhin an, dass es eine "unbekannte" (im Sinn von: nicht eindeutig) Version gefunden hat, und ob du trotzdem weiter installieren willst
Zitat:

Delphi-Quellcode:
if(RegQueryStringValue(HKLM,'{#UNINSTKEY}','UninstallString',tmp)) and
  (tmp <> '') and
  (fileexists(tmp)) then
begin
  Result := (MsgBox(ExpandConstant('{cm:NotVerifiedVersionFound}'),
    mbConfirmation,MB_YESNO or MB_DEFBUTTON2) = IDYES);
  exit;
end;

Anstelle der MessageBox könntest du auch die Deinstallation einleiten, denn in der tmp-Variablen steckt der Name des Uninstallers. Du musst eben nur bedenken, dass in diesem Beispiel der Unsinstallschlüssel auch aus einer GUID am Anfang des Skriptes gebildet wird:
Zitat:

Code:
#define APPID "3C1AFEA1-5284-4987-AF37-EAE41F2EDBCA"
#define UNINSTKEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\" \
  + APPID + "_is1"

[Setup]
...
AppId={#APPID}

Das musst du selbstverständlich an dein eigenes Skript anpassen, sonst funktioniert es wieder nicht! Aber vielleicht solltest du auch erst einmal mit einem Grundlagentutorial anfangen und dich mit Inno Setup vertraut machen, denn ganz so trivial ist die Sache mit den Setups dann doch nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz