|
Daniel Espendiller - 2010 |
Server Links |
Inno Setup: DLL .net Registrierung mit RegAsm für x64 und x86
Addins bzw DLLs mit dem Framework erstellt müssen über RegAsm registriert werden. Die bisher von immer eingesetzt Batchdatei war für mich keine Lösung. Es musste also eine Installations Rutine her. Ich nahm also die freie Inno Setup Engine, da es bereits einige Lösung hierzu gab.
Das aufgeführte Skript sucht über InitializeSetup nach einem Installierten Framework, wird keines gefunden so wird eine entsprechende Meldung ausgegeben und das Setup abgebrochen.
Wird eines gefunden so wird der Frameworkpfad aus der Windows-Registrierung geholt. (x64 und x86 Anwendungen brauchen schlauerweise unterschiedliche Pfade) und mittles RegAsm die DLL im System registriert.
altes Batchfile
@echo off xcopy . "%ProgramFiles%\Autodesk\Druckbuttons" /Y /D /I /E IF %PROCESSOR_ARCHITECTURE% == AMD64 GOTO x64 IF %PROCESSOR_ARCHITECTURE% == x86 GOTO x86 echo unbekannter CPU-Typ :x86 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe /codebase "%ProgramFiles%\Autodesk\Druckbuttons\DruckButtons.dll" echo x86 - RegAsm goto ende :x64 C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\RegAsm.exe /codebase "%ProgramFiles%\Autodesk\Druckbuttons\DruckButtons.dll" echo x64 - RegAsm goto ende :ende
Inno Setup Skript
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{C8207074-1437-48AB-863E-4359939487E6}
AppName=Inventor-DruckButtons
AppVerName=Inventor-DruckButtons
AppVersion=2.0
DefaultDirName={pf}\Inventor-Addins\DruckButtons
DisableProgramGroupPage=yes
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
VersionInfoVersion=2.0
VersionInfoProductName=Inventor-DruckButtons
ArchitecturesInstallIn64BitMode=x64 ia64
[Code]
function InitializeSetup(): Boolean;
var
NetFrameWorkInstalled : Boolean;
Result1 : Boolean;
begin
NetFrameWorkInstalled := RegKeyExists(HKLM,'SOFTWARE\Microsoft\.NETFramework\policy\v2.0');
if NetFrameWorkInstalled =true then
begin
Result := true;
end;
if NetFrameWorkInstalled = false then
begin
NetFrameWorkInstalled := RegKeyExists(HKLM,'SOFTWARE\Microsoft\.NETFramework\policy\v2.0');
if NetFrameWorkInstalled = true then
begin
Result := true;
end;
if NetFrameWorkInstalled =false then
begin
Result1 := MsgBox('This setup requires the .NET Framework 2.0. Please download and install the .NET Framework and run this setup again.',
mbConfirmation, MB_OK) = idYes;
if Result1 =false then
begin
Result:=false;
end
else
begin
Result:=false;
//Run the .NET redistributable here using shellexec.
end;
end;
end;
end;
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
[Files]
Source: "icos\*"; DestDir: "{app}\icos"; Flags: ignoreversion recursesubdirs createallsubdirs;
Source: "install\*"; DestDir: "{app}\install"; Flags: ignoreversion recursesubdirs createallsubdirs;
Source: "drucker.xml"; DestDir: "{app}"; Flags: ignoreversion;
Source: "DruckButtons.dll"; DestDir: "{app}"; Flags: ignoreversion;
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
[run]
Filename:"{reg:HKLM\SOFTWARE\Microsoft\.NETFramework,InstallRoot}\v2.0.50727\RegAsm.exe"; Parameters: /codebase DruckButtons.dll;WorkingDir: {app}; StatusMsg: "Registering controls ..."; Flags: runhidden;
[UninstallRun]
Filename:"{reg:HKLM\SOFTWARE\Microsoft\.NETFramework,InstallRoot}\v2.0.50727\RegAsm.exe"; Parameters: /unregister DruckButtons.dll;WorkingDir: {app}; StatusMsg: "Unegistering controls ..."; Flags: runhidden;