2013-09-04 18 views
5

Ich habe eine DLL und OCX Pack dann habe ich beschlossen, ein Installationsprogramm zu machen.DLL/OCX in InnoSetup registrieren

Das ist, was ich habe:

ArchitecturesInstallIn64BitMode=x64 

[Files] 
Source: {syswow64}\*; DestDir: {syswow64}; Flags: onlyifdoesntexist 
Source: {sys}\*; DestDir: {sys}; Flags: onlyifdoesntexist 


[Run] 

Filename: regsvr32.exe; Parameters: """{sys}\zlib1.dll"" /S"; StatusMsg: Registrando: zlib1.dll; Flags: RunHidden WaitUntilTerminated 

Filename: regsvr32.exe; Parameters: """{syswow64}\actskin4.ocx"" /S"; StatusMsg: Registrando: actskin4.ocx; Flags: RunHidden WaitUntilTerminated 
Filename: regsvr32.exe; Parameters: """{syswow64}\Bassmod.dll"" /S"; StatusMsg: Registrando: Bassmod.dll; Flags: RunHidden WaitUntilTerminated 
Filename: regsvr32.exe; Parameters: """{syswow64}\ChamaleonButton.ocx"" /S"; StatusMsg: Registrando: ChamaleonButton.ocx; Flags: RunHidden WaitUntilTerminated 
Filename: regsvr32.exe; Parameters: """{syswow64}\Codejock.Calendar.v13.4.0.Demo.ocx"" /S"; StatusMsg: Registrando: Codejock.Calendar.v13.4.0.Demo.ocx; Flags: RunHidden WaitUntilTerminated 
Filename: regsvr32.exe; Parameters: """{syswow64}\Codejock.Codejock.TaskPanel.v13.4.0.Demo.ocx"" /S"; StatusMsg: Registrando: Codejock.Codejock.TaskPanel.v13.4.0.Demo.ocx; Flags: RunHidden WaitUntilTerminated 
Filename: regsvr32.exe; Parameters: """{syswow64}\Codejock.CommandBars.v13.4.0.Demo.ocx"" /S"; StatusMsg: Registrando: Codejock.CommandBars.v13.4.0.Demo.ocx; Flags: RunHidden WaitUntilTerminated 
Filename: regsvr32.exe; Parameters: """{syswow64}\Codejock.Controls.Unicode.v13.2.1.ocx"" /S"; StatusMsg: Registrando: Codejock.Controls.Unicode.v13.2.1.ocx; Flags: RunHidden WaitUntilTerminated 
Filename: regsvr32.exe; Parameters: """{syswow64}\Codejock.Controls.v13.4.0.Demo.ocx"" /S"; StatusMsg: Registrando: Codejock.Controls.v13.4.0.Demo.ocx; Flags: RunHidden WaitUntilTerminated 
Filename: regsvr32.exe; Parameters: """{syswow64}\Codejock.DockingPane.v13.4.0.Demo.ocx"" /S"; StatusMsg: Registrando: Codejock.DockingPane.v13.4.0.Demo.ocx; Flags: RunHidden WaitUntilTerminated 
Filename: regsvr32.exe; Parameters: """{syswow64}\Codejock.Markup.v13.4.0.Demo.ocx"" /S"; StatusMsg: Registrando: Codejock.Markup.v13.4.0.Demo.ocx; Flags: RunHidden WaitUntilTerminated 
Filename: regsvr32.exe; Parameters: """{syswow64}\Codejock.PropertyGrid.v13.4.0.Demo.ocx"" /S"; StatusMsg: Registrando: Codejock.PropertyGrid.v13.4.0.Demo.ocx; Flags: RunHidden WaitUntilTerminated 
Filename: regsvr32.exe; Parameters: """{syswow64}\Codejock.ReportControl.v13.4.0.Demo.ocx"" /S"; StatusMsg: Registrando: Codejock.ReportControl.v13.4.0.Demo.ocx; Flags: RunHidden WaitUntilTerminated 
Filename: regsvr32.exe; Parameters: """{syswow64}\Codejock.ShortcutBar.v13.4.0.Demo.ocx"" /S"; StatusMsg: Registrando: Codejock.ShortcutBar.v13.4.0.Demo.ocx; Flags: RunHidden WaitUntilTerminated 
Filename: regsvr32.exe; Parameters: """{syswow64}\Codejock.SkinFramework.v13.4.0.Demo.ocx"" /S"; StatusMsg: Registrando: Codejock.SkinFramework.v13.4.0.Demo.ocx; Flags: RunHidden WaitUntilTerminated 
Filename: regsvr32.exe; Parameters: """{syswow64}\Codejock.SyntaxEdit.v13.4.0.Demo.ocx"" /S"; StatusMsg: Registrando: Codejock.SyntaxEdit.v13.4.0.Demo.ocx; Flags: RunHidden WaitUntilTerminated 
Filename: regsvr32.exe; Parameters: """{syswow64}\HookMenu.ocx"" /S"; StatusMsg: Registrando: HookMenu.ocx; Flags: RunHidden WaitUntilTerminated 
Filename: regsvr32.exe; Parameters: """{syswow64}\MSCOMCTL.OCX"" /S"; StatusMsg: Registrando: MSCOMCTL.OCX; Flags: RunHidden WaitUntilTerminated 
Filename: regsvr32.exe; Parameters: """{syswow64}\MSCOMCTL32.OCX"" /S"; StatusMsg: Registrando: MSCOMCTL32.OCX; Flags: RunHidden WaitUntilTerminated 
Filename: regsvr32.exe; Parameters: """{syswow64}\Msvbvm50.dll"" /S"; StatusMsg: Registrando: Msvbvm50.dll; Flags: RunHidden WaitUntilTerminated 
Filename: regsvr32.exe; Parameters: """{syswow64}\msvcr71.dll"" /S"; StatusMsg: Registrando: msvcr71.dll; Flags: RunHidden WaitUntilTerminated 
Filename: regsvr32.exe; Parameters: """{syswow64}\zlib1.dll"" /S"; StatusMsg: Registrando: zlib1.dll; Flags: RunHidden WaitUntilTerminated 

ich den Regserver parametter gesehen habe, aber ich bin mir nicht sicher, wie es funktioniert (ich die parametter Dokumentation habe mich gelesen), ich brauche kann ich wissen, ob die Dinge vereinfachen, indem ohne dies nur tun, alle [RUN] -Abschnitt benötigt ?:

[Files] 
Source: {syswow64}\*; DestDir: {syswow64}; Flags: onlyifdoesntexist regserver 
Source: {sys}\*; DestDir: {sys}; Flags: onlyifdoesntexist regserver 

Und auch wenn ich das tun, dann muss ich noch die „ArchitecturesInstallIn64BitMode“ angeben? für die korrekte Registrierung der ersten x64 dll?

UPDATE:

Vielleicht ist dies eine bessere Äquivalent des [RUN] -Abschnitt:

[Files] 
Source: {syswow64}\*; DestDir: {syswow64}; Flags: onlyifdoesntexist regserver 32bit 
Source: {sys}\*; DestDir: {sys}; Flags: onlyifdoesntexist regserver 64bit 

Antwort

10

Je mehr richtige Ansatz wäre:

[Files] 
Source: C:\yourdlls\x86\*; DestDir: {sys}; Flags: onlyifdoesntexist regserver 32bit 
Source: C:\yourdlls\x64\*; DestDir: {sys}; Flags: onlyifdoesntexist regserver 64bit; Check: IsWin64 

Beachten Sie, dass Ich habe das Quellverzeichnis geändert. Das ist, weil es eine erstaunlich schlechte Idee ist, Dateien aus Ihrem eigenen Windows-Ordner zu finden, und noch schlimmer, dies mit Platzhaltern zu tun. Sie fragen nur nach etwas, das die Windows Installation von jemand anderem zerstört, wenn Sie das versuchen.

(Beachten Sie auch, dass Sie sollten nie besonders {syswow64}, installieren, wenn Regserver verwendet wird. Die obigen Zeilen die gleiche Wirkung für die Installation in zwei separate Ordner haben, aber sie werden tatsächlich die Dinge richtig registrieren, im Gegensatz zu, was man hatte.)

+0

wie in den Bemerkungen unten auf http://www.jrsoftware.org/ishelp/index.php?topic=filesection - regserver erwähnt, hat eine gut qualifizierte Versionsprüfung stattgefunden, daher denke ich nicht an die Verwendung des onlyifdoesntexist Flags Es ist garantiert. Die Verwendung der sharedfile Flag ist fast definitiv. – s01ipsist

+1

Ja, normalerweise sollten Sie bei der Installation von '{sys}' 'sharedfile' verwenden und nicht' onlyifdoesntexist'. Ich benutzte die gleichen Flaggen wie die ursprüngliche Frage unter der Annahme, dass es einen Grund gab, warum das OP sie wollte, aber dies sollte nicht als allgemeine Empfehlung verstanden werden. – Miral