我正在使用Windows安装程序来安装/升级安装。
使用Visual Studio我可以手动更改版本号,然后在要求更改ProductCode时选择“是”。如果在安装程序项目上设置了以下属性,则会创建一个能够覆盖现有安装的安装程序
RemovePreviousVersions True
DetectNewerInstalledVersion True
现在在我的构建服务器中,我可以将版本号更改为.vdproj项目中的相应新版本。
有人可以建议如何从命令行或批处理脚本为项目生成新的ProductCode吗?
答案 0 :(得分:0)
解决方案是使用uuidgen
uuidgen -c
将生成相应的ProductCode。
以下批处理脚本将更新产品代码,并在执行发布版本之前通过构建服务器应用时允许覆盖安装。
REM
REM Batch file to set the release number and version number for a production release
REM
REM
if not defined RELEASE_VERSION exit /b 1
if not defined BUILD_NUMBER exit /b 1
if not defined SVN_REVISION exit /b 1
set SDKBIN=%PROGRAMFILES%\Microsoft SDKs\Windows\v7.0A\Bin
if defined PROGRAMFILES(X86) Set SDKBIN=%PROGRAMFILES(X86)%\Microsoft SDKs\Windows\v7.0A\Bin
REM Change the version details in the WindowsInstaller project
fart WindowsInstaller\WindowsInstaller.vdproj "\"ProductVersion\" = \"8:1.0.0\"" "\"ProductVersion\" = \"8:%RELEASE_VERSION%.%BUILD_NUMBER%\""
if %ERRORLEVEL%==0 exit /b 1
for /f %%i in ('"%SDKBIN%\uuidgen" -c') do set PRODUCTCODE=%%i
if not defined PRODUCTCODE exit /b 2
fart WindowsInstaller\WindowsInstaller.vdproj "\"ProductCode\" = \"8:{2DD6303F-BF0C-4CD5-9AAC-171C577FFEAD}\"" "\"ProductCode\" = \"8:{%PRODUCTCODE%}\""
if %ERRORLEVEL%==0 exit /b 1
exit /b 0
我使用fart在源文件中执行正则表达式替换。
答案 1 :(得分:0)
如您所见 Visual Studio安装项目已弃用: http://blogs.msdn.com/b/buckh/archive/2011/03/17/visual-studio-setup-projects-vdproj-will-not-ship-with-future-versions-of-vs.aspx
尽快迁移到WIX会更有意义。它确实有一个学习曲线,但它没有一些人想象的那么糟糕。如果你以正确的方式开始,你很快就会在那里。关键是要以样本为基础并首先实施基础知识。 Wix中有一定程度的“自动化”,如果您正确阅读帮助文件,它将帮助您做正确的事情。
请在此处查看我的答案以获取一些好的指示: https://stackoverflow.com/a/22550256/129130 - 特别是codeproject链接可能是一个良好的开端。
Wix具有自动更改每个版本的产品代码和包代码的新功能。
答案 2 :(得分:0)
如果您将Product/@Id
设置为*
,Wix会自动为您的安装程序生成新的ProductCode:
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*" Name="myproduct" ... >
...
</Product>
</Wix>
PackageCode
通常会自动生成。 documentation says您应该始终为产品生成新的包裹代码,因此可以省略该属性。对于合并模块,您必须指定包代码,否则不应使用它。
UpgradeCode
指定相关产品系列。主要升级仅适用于标有相同UpgradeCode
的包。
要支持主要升级,最简单的方法是使用MajorUpgrade
元素。它默认为防止降级 - 如果用户尝试执行此操作,则指定DowngradeErrorMessage
属性以提供消息。您所需要的只是以下内容:
<MajorUpgrade
DowngradeErrorMessage="A later version of [ProductName] is already installed. Setup will now exit.">