如何使用InstallShield在构建时自动创建新的产品代码



我最近刚刚了解到,通过在InstallShield中生成新的产品代码,安装程序将升级您的软件的早期版本,而不需要用户首先卸载早期版本。这是一个很好的第一步,但我似乎仍然能够在每次构建时自动生成新产品代码。目前,在构建新的安装程序之前,我必须手动记住要这样做。

我使用的是InstallShield LE 2015,所以我不确定这是否是LE版本的限制。有人能在InstallShield方面更有经验吗?请解释是否可能,以及我如何设置它?

ProductCode存储为一个属性,因此您可以编辑.slproj文件(或者它为msbuild语法项目文件使用的任何名称),为该属性指定新的guid值。按照自定义.isproj文件中概述的方法,添加类似于以下内容的ItemGroup。请注意,本示例假设您以某种方式在$(MyNewProductCode)中提供了一个有效的GUID。

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

您是通过命令行还是通过msbuild或某种自动化方法进行构建?如果你是,你可以使用以下方法:

:: Change Product Code for Build
FOR /f "delims=" %%i IN ('"C:Program Files (x86)Microsoft SDKsWindowsv7.1ABinx64uuidgen.exe"') DO SET productcodeguidcl=%%i
"C:PATHTOFNRfnr.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项目一段时间,没有任何问题,直到我们最终将项目切换到Installshield API。

为了扩展Michael Urman上面的回答,我可以使用属性函数直接从.isproj文件中生成新的GUID。当我的CI机器构建我的安装屏蔽项目时,产品代码会使用以下内容自动更新:

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

用于自动化的Hooray。

最新更新