根据这个问题的答案,我无法在我的.msi文件中嵌入文件版本。
我提供给客户端的安装程序需要具有文件版本。
因此,我想做的是创建一个包含 msi 文件和安装程序的自解压可执行文件.exe由 Visual Studio 生成,并将文件版本放在这个自解压可执行文件上。
因此,我需要一个实用程序来创建支持在其输出中嵌入文件版本的自解压可执行文件。它还需要支持在解压缩后自动运行文件,所以我可以自动启动真正的安装程序。如果它是可编写脚本的,那就太好了。
我能找到的就是这个,看起来很棒,但我更喜欢免费的替代品。
有人有什么建议吗?
编辑:澄清一下,我并不是真的想创建一个安装程序 - 我已经有一个 VS 安装项目。我只想要一个自解压器(就像WinZip可以创建的)。因此,用户将鼠标悬停在 Setup-Blorgbeard2008.exe 上,看到"版本:1.0.0.0"。用户双击它,它会静默地将安装程序.exe和setup.msi提取到临时文件夹,然后运行setup.exe。然后,用户会看到正常的安装程序屏幕并正常进行。
另一个编辑:是的,我不再需要自解压器了,因为我的另一个问题现在已经得到了回答。这使得整个问题几乎无关紧要。如果只能分发一个文件,而不是设置.exe和设置.msi,那仍然很好。
有点惊讶它还没有在这里列出:IExpress是Windows附带的一个简单的工具,可用于创建自解压安装程序。
NSIS可以做到这一点。
构建环境的一部分是一个脚本,它将版本信息输出到我们的 NSIS 脚本源的"头"文件。 您应该能够使用类似的东西来嵌入版本信息,并且您当然可以让 NSIS 在提取后运行文件。
事实上,当 NSIS 创建安装程序包时...你也许可以大大简化你的方法。
当您下载Windows SDK时,有MSIStuff.exe和Setup.exe MS提供了要编译的源代码。MSIStuff会将您提供给它的MSI"填充"到Setup.exe中。然后可以分发安装程序.exe。
更多信息请访问 http://support.microsoft.com/kb/888473
缺点:
- 每次有新版本的产品 (MSI) 时,都必须使用产品版本重新编译安装程序.exe。
- 不确定安装程序.exe源是在哪个许可证下分发的。
实际上,我最终将NSIS用于此特定版本,因为我还需要捆绑其他一些安装程序。
作为参考,这是我使用的脚本:
VIProductVersion "1.0.0.0" ; set version here
VIAddVersionKey "FileVersion" "1.0.0.0" ; and here!
VIAddVersionKey "CompanyName" "MyCompany"
VIAddVersionKey "LegalCopyright" "© MyCompany"
VIAddVersionKey "FileDescription" "Installer for MyProgram"
OutFile MyProgram-Setup.exe
SilentInstall silent
Section Main
SetOutPath $TEMP
SetOverwrite on
File SharedManagementObjects.msi
File SQLSysClrTypes.msi
File ReleaseSetup.exe
File ReleaseSetup.msi
ExecWait 'msiexec /passive /i "$OUTDIRSharedManagementObjects.msi"'
ExecWait 'msiexec /passive /i "$OUTDIRSQLSysClrTypes.msi"'
Exec '"$OUTDIRSetup.exe"'
SectionEnd
DotNetZip 可以生成自解压存档,其中包括显示在 Windows 资源管理器鼠标悬停中的版本号。 SFX 还包括产品名称、说明、产品版本和版权,这些内容显示在 Windows 资源管理器的"属性/详细信息"视图中。
SFX 可以运行您在解压缩后指定的命令。
SFX的创建可以从powershell编写脚本,也可以使用 VB.NET,C#,VBScript或JavaScript等编写程序来执行此操作。
要获取版本号,您至少需要 DotNetZip 的 v1.9.0.26。
nsis 看起来是一个不错的选择
尝试 inno-setup
将 VersionInfoVersion 指令设置为二进制版本号,例如
VersionInfoVersion = 1.1.0.0
这将出现在鼠标悬停文本和属性中
实验正在进行中:
弹出版本信息:http://screencast.com/t/LVqvLfxCj3g
从Visual Studio Assembly信息:http://screencast.com/t/fqunlMNh13
使用普通的旧MSI文件安装。
通过将"版本: 1.5.0"文本添加到安装项目的"说明"属性中,版本号也会显示在 MSI 文件中,如下所示:http://screencast.com/t/A499i6jS
我通常只是重命名 MSI 文件,例如出于我自己的目的重命名DataMonkey_1_5_0.msi。
没有意义.exe以验证是否已安装.NET(DotNetZip自解压器需要.NET 2.0)。