Entwicklung einer Browser-Toolbar: Installationssystem (4/5)

Diese Artikelserie ist die deutsche Übersetzung meines Artikels “Developing a Browser Toolbar”, der in den ASPects (Englisch) im Januar 2010 (Jahrgang 23, Ausgabe 1), ein Magazin der Association of Shareware Professionals (ASP; Englisch), veröffentlicht wurde.

Jetzt haben wir eine Toolbar für Internet Explorer und Firefox, aber wie bekommen wir diese installiert? Es gibt nur ein Installationstool, das ich auch für sämtliche meiner anderen Produkte verwende und dass so ziemlich alles kann: Inno Setup (Englisch). Im Folgenden lesen Sie, was Sie für die Installation der beiden Toolbar-Versionen benötigen.

Toolbar-Installation im Mozilla Firefox

Wieder ist es sehr viel einfacher eine neue Toolbar im Firefox-Browser zu installieren. Sie müssen Ihre XPI-Datei lediglich in das Firefox-Erweiterungsverzeichnis kopieren. Die Toolbar wird dann beim nächsten Browser-Start installiert. Somit benötigen wir lediglich eine Pascal-Funktion in unserem Inno-Setup-Quelltext, die uns das Erweiterungsverzeichnis des Firefox‘ zurückgibt:

function GetFirefoxExtensionsPath(Param: String): String;
var
    FirefoxVersion, FirefoxInstallPath: string;
begin
    if (RegQueryStringValue(HKLM, 'SOFTWARE\Mozilla\Mozilla Firefox',
            'CurrentVersion', FirefoxVersion)) then begin
        if (RegQueryStringValue(HKLM, 'SOFTWARE\Mozilla\Mozilla Firefox\' + FirefoxVersion +
                '\Main', 'Install Directory', FirefoxInstallPath)) then begin
            if (not DirExists(FirefoxInstallPath +
                   '\extensions\toolbarebay@ab-tools.com')) then begin
                Result := FirefoxInstallPath + '\extensions';
            end;
        end;
    end;
end;

Toolbar-Installation im Microsoft Internet Explorer

Um die Toolbar im Internet Explorer zu installieren, müssten wir zunächst die strongly-named Assembly im Global Assembly Cache (GAC) mittels des gacinstall-Kennzeichens, verfügbar in der aktuellen Inno-Setup-Version, im file-Bereich registrieren. Zusätzlich müssen wir einige Registry-Änderungen durchführen. Sie können den folgenden Quelltext in den registry-Bereich Ihres Inno-Setup-Skriptes kopieren und sämtliche Variablen durch Ihre eigenen ersetzen (ich habe den Inno-Setup-Syntax ein wenig verkürzt, um es etwas kompakter zu bekommen):

HKCR: CLSID\{{%GUID%}; Flags: uninsdeletekey
HKCR: CLSID\{{%GUID%}; ValueType: string; ValueName: ; ValueData: %LONG_NAME%
HKCR: CLSID\{{%GUID%}; ValueType: string; ValueName: MenuText; ValueData: %LONG_NAME%
HKCR: CLSID\{{%GUID%}; ValueType: string; ValueName: HelpText; ValueData: %DESCRIPTION%
HKCR: CLSID\{{%GUID%}\Implemented Categories\{{00021494-0000-0000-C000-000000000046}
HKCR: CLSID\{{%GUID%}\InprocServer32; ValueType: string; ValueName: ; ValueData: mscoree.dll
HKCR: CLSID\{{%GUID%}\InprocServer32; ValueType: string; ValueName: ThreadingModel; ValueData: Both
HKCR: CLSID\{{%GUID%}\InprocServer32; ValueType: string; ValueName: Class; ValueData: %CLASS%
HKCR: CLSID\{{%GUID%}\InprocServer32; ValueType: string; ValueName: Assembly; ValueData: %NAMESPACE%, Version=%VERSION%, Culture=neutral, PublicKeyToken=%PUBLIC_KEY%
HKCR: CLSID\{{%GUID%}\InprocServer32; ValueType: string; ValueName: RuntimeVersion; ValueData: v2.0.50727
HKLM: Software\Classes\CLSID\{{%GUID%}; Flags: uninsdeletekey
HKLM: Software\Classes\CLSID\{{%GUID%}; ValueType: string; ValueName: ; ValueData: %LONG_NAME%
HKLM: Software\Classes\CLSID\{{%GUID%}; ValueType: string; ValueName: MenuText; ValueData: %LONG_NAME%
HKLM: Software\Classes\CLSID\{{%GUID%}; ValueType: string; ValueName: HelpText; ValueData: %DESCRIPTION%
HKLM: Software\Classes\CLSID\{{%GUID%}\Implemented Categories\{{00021494-0000-0000-C000-000000000046}
HKLM: Software\Classes\CLSID\{{%GUID%}\InprocServer32; ValueType: string; ValueName: ; ValueData: mscoree.dll
HKLM: Software\Classes\CLSID\{{%GUID%}\InprocServer32; ValueType: string; ValueName: ThreadingModel; ValueData: Both
HKLM: Software\Classes\CLSID\{{%GUID%}\InprocServer32; ValueType: string; ValueName: Class; ValueData: %CLASS%
HKLM: Software\Classes\CLSID\{{%GUID%}\InprocServer32; ValueType: string; ValueName: Assembly; ValueData: %NAMESPACE%, Version=%VERSION%, Culture=neutral, PublicKeyToken=%PUBLIC_KEY%
HKLM: Software\Classes\CLSID\{{%GUID%}\InprocServer32; ValueType: string; ValueName: RuntimeVersion; ValueData: v2.0.50727
HKLM: SOFTWARE\Microsoft\Internet Explorer\Toolbar; ValueType: string; ValueName: {{%GUID%}; ValueData: %LONG_NAME%
HKLM: SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects\{{%GUID%}; Flags: uninsdeletekey
HKLM: SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects\{{%GUID%}; ValueType: dword; ValueName: NoExplorer; ValueData: 1

Um keinen unnötigen Müll auf den Computer des Benutzers zu schreiben, sollten die Registry-Änderungen nur durchgeführt und die Dateien nur kopiert werden, wenn das .NET-Framework 2.0 (oder neuer) auf dem System installiert ist, da dieses – wie bereits weiter oben geschrieben – für die Internet-Explorer-Toolbar benötigt wird. Sie können die Verfügbarkeit des .NET-Framework 2.0 relativ einfach mit folgender Pascal-Funktion überprüfen:

function CheckForDotNet(): Boolean;
begin
    Result := RegKeyExists(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v2.0.50727');
end;

Dies waren die Schritte, um ein Inno-Setup-Installationsprogramm für beide Toolbar-Versionen zu erstellen. Natürlich können Sie diese in einer einzigen Setup-Datei, welche die Internet-Explorer- sowie die Firefox-Version – je nachdem welcher Browser auf dem System vorhanden ist – installiert, zusammenfassen.

Der letzte Artikel wird eine kurze Zusammenfassung sein.

Inhalt der Artikelserie “Entwicklung einer Browser-Toolbar”:

Der Artikel ist auch in English verfügbar.

2 Gedanken zu “Entwicklung einer Browser-Toolbar: Installationssystem (4/5)

  1. Pingback: Entwicklung einer Browser-Toolbar: Microsoft Internet Explorer (3/5) | AB-WebLog.com

  2. Pingback: Entwicklung einer Browser-Toolbar: Mozilla Firefox (2/5) | AB-WebLog.com

Einen Kommentar hinterlassen

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*

Sie können folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>