5

根据这个问题的答案,我无法在我的 .msi 文件中嵌入文件版本。

我给客户的安装程序需要有一个文件版本。

所以,我想做的是创建一个包含 msi 文件和由 Visual Studio 生成的 setup.exe 的自解压可执行文件,并将文件版本放在这个自解压可执行文件上。

因此,我需要一个实用程序来创建支持在其输出中嵌入文件版本的自解压可执行文件。它还需要支持解压后自动运行文件,这样我才能自动启动真正的安装程序。如果它是可编写脚本的就好了。

我只能找到这个,它看起来很棒,但我更喜欢免费的替代品。

有没有人有什么建议?

编辑:澄清一下,我并不是真的想创建一个安装程序——我已经有一个 VS 安装项目。我只想要一个自解压器(就像 WinZip 可以创建的那样)。因此,用户将鼠标悬停在 Setup-Blorgbeard2008.exe 上,会看到“版本:1.0.0.0”。用户双击它,它会静默地将 setup.exe 和 setup.msi 提取到临时文件夹,然后运行 ​​setup.exe。然后用户会看到正常的安装程序屏幕并正常进行。

另一个编辑:是的,我不再需要自解压器了,因为我的另一个问题现在已经得到解答。这使得整个问题几乎无关紧要。能够仅分发一个文件而不是 setup.exe 和 setup.msi 仍然很好。

4

9 回答 9

10

有点惊讶它还没有在此处列出:IExpress是 Windows 附带的一个简单工具,可用于创建自解压安装程序。

于 2009-02-17T12:44:35.500 回答
4

NSIS 可以做到这一点。

我们构建环境的一部分是一个脚本,它将版本信息输出到我们的 NSIS 脚本来源的“头”文件。您应该能够使用类似的东西来嵌入您的版本信息,并且您当然可以让 NSIS 在提取后运行文件。

事实上,当 NSIS 创建安装程序包时……您可以大大简化您的方法。

于 2008-09-30T02:50:32.860 回答
3

下载 Windows SDK 时,有 MSStuff.exe 和 Setup.exe,MS 提供源代码编译。MSIStuff 会将您提供的 MSI “填充”到 Setup.exe 中。然后可以分发 Setup.exe。

更多信息,请访问http://support.microsoft.com/kb/888473

缺点:

  • 每次有新版本的产品 (MSI) 时,您都必须使用产品版本重新编译 Setup.exe。
  • 不确定 Setup.exe 源的分发许可证是什么。
于 2008-09-30T02:46:28.940 回答
2

实际上,我最终在这个特定版本中使用了 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 Release\Setup.exe
    File Release\Setup.msi
    ExecWait 'msiexec /passive /i "$OUTDIR\SharedManagementObjects.msi"'
    ExecWait 'msiexec /passive /i "$OUTDIR\SQLSysClrTypes.msi"'
    Exec     '"$OUTDIR\Setup.exe"'
SectionEnd
于 2008-09-30T05:08:52.840 回答
2

DotNetZip可以生成自解压存档,其中包括显示在 Windows 资源管理器鼠标悬停中的版本号。SFX 还包括产品名称、描述、产品版本和版权,显示在 Windows 资源管理器的“属性/详细信息”视图中。

SFX 可以运行您在提取后指定的命令。

SFX 的创建可以从 powershell 编写脚本,或者您可以编写一个程序来执行它,使用 VB.NET、C#、VBScript 或 JavaScript 等。

要获取版本号,您至少需要 v1.9.0.26 的 DotNetZip。

于 2009-10-22T20:42:34.670 回答
1

尝试inno-setup

将 VersionInfoVersion 指令设置为您的二进制版本号,例如

VersionInfoVersion = 1.1.0.0

这将出现在鼠标悬停文本和属性中

于 2008-09-30T01:35:06.927 回答
1

nsis看起来是个不错的选择

于 2008-09-30T01:40:01.267 回答
1

在这里进行实验:

弹出版本信息: http ://screencast.com/t/LVqvLfxCj3g

来自 Visual Studio 程序集信息: http ://screencast.com/t/fqunlMNh13

使用普通的旧 MSI 文件安装。

通过将“版本:1.5.0”文本添加到设置项目的描述属性中,版本号也会显示在 MSI 文件中,如下所示: http ://screencast.com/t/A499i6jS

我通常只是为了我自己的目的重命名 MSI 文件,比如 DataMonkey_1_5_0.msi。

于 2008-09-30T01:58:38.960 回答
0

仅供参考,如果您使用引导程序 setup.exe 来验证 .NET 是否已安装(DotNetZip 自解压器需要 .NET 2.0),则使用 DotNetZip 自解压器没有意义。

于 2010-01-27T22:59:11.273 回答