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”:
- Einführung
- Mozilla Firefox
- Microsoft Internet Explorer
- Installationssystem
- Zusammenfassung
Der Artikel ist auch in English verfügbar.
Pingback: Entwicklung einer Browser-Toolbar: Microsoft Internet Explorer (3/5) | AB-WebLog.com
Pingback: Entwicklung einer Browser-Toolbar: Mozilla Firefox (2/5) | AB-WebLog.com