2016-08-04 9 views
0

Недавно я узнал, что, создав новый код продукта в InstallShield, установщик обновит предыдущую версию вашего программного обеспечения, вместо того чтобы потребовать от пользователя первой деинсталляции предыдущей версии. Это отличный первый шаг, однако мне все же кажется, что я должен иметь возможность автоматизировать процесс генерации нового кода продукта каждый раз, когда я строю. В настоящее время мне приходится вручную помнить об этом, прежде чем создавать новый установщик.Как автоматически создать новый код продукта при сборке с помощью InstallShield?

Я использую InstallShield LE 2015, поэтому я не уверен, что это может быть ограничение версии LE или нет. Может ли кто-нибудь более опытный с InstallShield? Объясните, возможно ли это, и как я могу это настроить?

ответ

1

Код продукта хранится как свойство, поэтому вы можете отредактировать свой файл .islproj (или независимо от того, какое имя он использует для файла проекта синтаксиса msbuild), чтобы указать новое значение guid для этого свойства. Следуйте подходу, указанному в Customizing the .isproj File, добавив ItemGroup, подобную приведенному ниже. Обратите внимание, что в этом примере предполагается, что вы каким-то образом предоставили действительный идентификатор GUID в $(MyNewProductCode).

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

Вы строите через командную строку или через msbuild или какой-либо автоматизированный метод? Если да, то вы можете использовать метод ниже:

:: 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%}" 

Примечания В следующем примере вы имеете uuidgen.exe (бесплатно) на сервере сборки, а также требуете fnr.exe свободного инструмента (https://findandreplace.codeplex.com/)

Мы использовали это для проектов MSI, Installscript MSI и Installscript без каких-либо проблем, пока мы, наконец, не включили наш проект в API Installshield.

0

Чтобы расширить ответ Майкла Урмана выше, я смог сгенерировать новый GUID непосредственно из файла .isproj, используя property function. Когда мой CI машина строит свой проект установки экрана, код продукта автоматически обновляется с помощью этого:

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

Hooray для автоматизации.