2016-08-04 28 views
0

Ich habe kürzlich erfahren, dass der Installer durch das Generieren eines neuen Produktcodes in InstallShield die vorherige Version Ihrer Software aktualisiert, anstatt dass der Benutzer zuerst eine vorherige Version deinstallieren muss. Dies ist ein großartiger erster Schritt, aber es scheint immer noch so zu sein, dass ich in der Lage sein sollte, den Prozess der Generierung eines neuen Produktcodes bei jedem Build zu automatisieren. Momentan muss ich mich manuell daran erinnern, dies zu tun, bevor ich ein neues Installationsprogramm erstelle.Wie erstellt man automatisch neuen Produktcode beim Build mit InstallShield?

Ich benutze InstallShield LE 2015, also bin ich mir nicht sicher, ob dies eine Einschränkung der LE-Version sein könnte oder nicht. Kann jemand mehr Erfahrung mit InstallShield haben? Bitte erkläre, ob es möglich ist und wie ich das bitte mache.

Antwort

1

Der ProductCode wird als Eigenschaft gespeichert. Sie können also Ihre .islproj-Datei (oder wie auch immer der Name für die Msbuild-Syntax-Projektdatei lautet) bearbeiten, um einen neuen GUID-Wert für diese Eigenschaft anzugeben. Folgen Sie dem in Customizing the .isproj File beschriebenen Ansatz, indem Sie eine ItemGroup ähnlich der folgenden hinzufügen. Beachten Sie, dass in diesem Beispiel davon ausgegangen wird, dass Sie eine gültige GUID in $(MyNewProductCode) bereitgestellt haben.

<ItemGroup> 
    <InstallShieldPropertyOverrides Include="$(MyNewProductCode)"> 
     <Property>ProductCode</Property> 
    </InstallShieldPropertyOverrides> 
</ItemGroup> 
1

Erstellen Sie über die Befehlszeile oder über Msbuild oder eine automatisierte Methode? Wenn Sie sind, können Sie die folgenden Methoden:

:: Change Product Code for Build 
FOR /f "delims=" %%i IN ('"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin\x64\uuidgen.exe"') DO SET productcodeguidcl=%%i 
"C:\PATHTOFNR\fnr.exe" --cl --dir "C:\PATHTOYOURISM" --fileMask "YOUR.ism" --useRegEx --alwaysUseEncoding "utf-8" --find "ProductCode.*{.*}" --replace "ProductCode</td><td>{%productcodeguidcl%}" 

Hinweis Im folgenden Beispiel wird vorausgesetzt, Sie haben uuidgen.exe (kostenlos) auf dem Build-Server und erfordert auch das kostenlose Tool fnr.exe (https://findandreplace.codeplex.com/)

Wir haben dies für Basic MSI's, Installscript MSI's und Installscript Projekte ohne Probleme genutzt, bis wir unser Projekt schließlich auf Installshield APIs umgestellt haben.

0

Um auf Michael Urmans Antwort oben zu erweitern, war ich in der Lage, die neue GUID direkt aus der .isproj-Datei zu generieren, indem Sie eine property function verwenden. Als mein CI Maschine mein baut Schild Projekt installieren, wird der Produktcode automatisch aktualisiert diese mit:

<ItemGroup> 
    <InstallShieldPropertyOverrides Include="{$([System.Guid]::NewGuid().ToString().ToUpper())}"> 
     <Property>ProductCode</Property> 
    </InstallShieldPropertyOverrides> 
</ItemGroup> 

für die Automatisierung Hooray.