2017-12-29 59 views
0

Ich habe Bat-Datei für automatische Erstellung erstellt. Es ist ein Installer für mein Produkt. Aber das Problem ist, dass vor dem automatischen Build-Skript ich den Produktcode manuell von Install Shield ändern muss. Gibt es eine Möglichkeit, den Produktcode automatisch zu ändern? weil alles außer Produktcode automatisch ist.Wie Produktcode programmgesteuert ändern

+0

Welche Version von Installshield verwenden Sie? –

+0

Verwenden Sie MSBuild oder ISCmdBld.exe? –

+0

Ich benutze Installation Shield Standalone Build – Hkachhia

Antwort

0

Ich denke, Sie sollten die InstallShield-Automatisierung für diese Art von Sache verwenden, wie das ISWiProductConfig-Objekt, das den ProductCode des MSI, das Sie erstellen, freilegt.

1

Als Phil sagt man dies über die COM-Automatisierungsschnittstelle für Install tun kann, aber es gibt auch andere Möglichkeiten, wie hier erklärt: Installshield Build Automation.

Wesentlichen:

  1. Der Link oben zeigt eine kleine Probe davon, wie die ausführbare eigenständige Build verwenden ISCmdBld.exe - die Sie bereits verwenden könnten.

    • Etwas wie: "[PATHHERE]ISCmdBld.exe" -p "MyInstaller.ism" -r SingleImage -y "1.0.0.13" -z ProductCode=%guid%.
    • Überprüfen Sie den obigen Link out - Ich habe ISCmdBld.exe niemals für COM-Automatisierung stattdessen verwendet.
  2. Die verknüpfte Antwort erklärt auch, wiemsbuild verwenden, lesen Sie Urman's answer.

  3. Schließlich können Sie die COM-Automatisierungsschnittstelle und ein VBScript (oder Javascript?) Verwenden, und ich habe ein kleines Beispiel unten hinzugefügt, wie dies funktionieren kann.

Ich habe keine Installshield 2013, aber hier ist eine sehr grobe Skizze, wie Sie die neueste Version 2016 über COM-Automatisierung automatisieren kann mit einem VBScript:

' On Error Resume Next 

Set isproject = CreateObject("ISWiAuto23.ISWiProject") 
isproject.OpenProject "C:\InstallShield 2016 Projects\TestProject.ism", False 

Set isproductconfig = isproject.AddProductConfig("MyNewProduct_1.0.16") 
isproductconfig.ProductName = "MyNewProduct_1.0.16" 
isproductconfig.ProductVersion = "1.0.16" 
isproductconfig.ProductCode = isproject.GenerateGUID 
' lots of properties to set, the above should normally suffice I think... 

Set isrelease = isproductconfig.AddRelease("MyNewRelease_1.0.16") 
isrelease.Compressed = True 
isrelease.SetupEXE = True 
' lots of properties to set... 

' Save and build project 
isproject.SaveProject ' For some reason the project won't save properly after it is built 
isrelease.Build 
isproject.SaveProject 

' Report error status 
WScript.Echo "Number of Build Errors: " & CStr(isrelease.BuildErrorCount) 
WScript.Echo "Number of Build Warnings: " & CStr(isrelease.BuildWarningCount) 

isproject.CloseProject 

Dieses Skript wurde nicht gründlich getestet und seltsamerweise werden die neue Produktkonfiguration und -version nicht gespeichert, es sei denn, Sie speichern vor dem Auslösen des Builds. Es könnte etwas Einfaches sein, das ich durcheinander gebracht habe - oder es könnte ein Fehler im Tool sein (es wäre nicht der erste).

Nimm es für das, was es ist, lass uns hoffen, dass es dir gelingt, die wilburys auf eigene Faust zu erarbeiten (Bugs). Ich denke, es könnte laufen, wenn Sie ISWiAuto23.ISWiProject zu IswiAuto20.ISWiProject ändern, um die Installshield 2013 COM-Server-Version zu entsprechen.

Entscheidend, müssen Sie das VBScript von einem 32-bit CScript.exe/WScript.exe ausführen (fragen Sie mich nicht, warum). Legen Sie einfach eine Verknüpfung zu C:\Windows\SysWOW64\cscript.exe auf Ihrem Desktop zum Testen, und ziehen Sie Ihr Skript per Drag & Drop, oder noch besser, öffnen Sie eine Eingabeaufforderung und gehen Sie zu C:\Windows\SysWOW64 (glaube es oder nicht ist dies der 32-Bit-Ordner - und the System32 folder is 64 bit (!) - Nur in Windows!) und geben Sie dann cscript.exe [FullPathToVBScript] ein. Denken Sie daran, Ihre ISM-Datei in der InstallShield-GUI zu schließen, bevor Sie das Skript ausführen.

Ich mag die Tatsache, dass Sie die neue Version und Produktkonfiguration in der * .ism-Datei speichern können, so dass Sie eine Liste der kompilierten Versionen haben. Ich bin mir nicht sicher, was ISCmdBld.exe tut.

+1

Dutzende von Sprachen unterstützen COM. Perl, Python, NodeJS, C++/C# ... ja nur 32bit wird unterstützt. :(Ich würde einfach IsCmdBld.exe -z Property = Value ohne all diese Komplexität verwenden. (Das heißt, ich bin wirklich ein MSBuild Anwalt, also würde ich eine Property Function verwenden, um die GUID zu generieren und diese mit PropertyOverrides in den Build zu übergeben. –

+0

Wahrscheinlich eine gute Idee zu versuchen ** MSBuild **. Ich würde es versuchen, wenn ich eine Chance hätte. Was die ** COM-Sprachen **: meine Erfahrung ist, dass Sie insgesamt X-Dateien Probleme bekommen, wenn Sie eine Sprache verwenden Das ist gut getestet mit dem fraglichen COM-Objektmodell. Ich hatte ernsthafte Fremdheit mit Javascript und dem Windows Installer-Objektmodell zum Beispiel (alle MSI SDK-Beispiele sind in VBScript - also wissen wir, womit sie ursprünglich getestet haben) Javascript könnte für Installshield besser sein, oder C# könnte auch gut getestet werden, keine Möglichkeit zu sagen, ich habe gehört, dass Leute viel kämpfen, wenn sie Perl mit COM ausprobieren. –