将 VERSIONINFO 添加到 SFX 安装程序

Add VERSIONINFO to SFX installer

我编写了一个 PowerShell 脚本来创建自解压存档 (a.k.a.SFX) 可执行文件 WinRAR command-line. The problem is that the VERSIONINFO 元数据完全为空(通过右键单击 *.exe 文件,转到 属性 ,然后单击 详细信息 选项卡。

这是我在脚本中使用的 WinRAR 命令:

$WinRarInstallPath = "$Env:ProgramFiles\WinRAR\winrar"

<#
    WinRAR arguments used:
        a       - Add files to an archive
        -cfg-   - Ignore default profile and environment variable 
        -ep1    - Exclude base folder from names
        -iadm   - Request administrative access for SFX archive
        -iicon  - Path to icon to use for installer
        -r      - Recurse subfolders
        -sfx    - Create self-extracting archive
        -z      - Path to archive comment file (SFX configuration file)
#>
&$WinRarInstallPath a -cfg- -ep1 -iadm -iicon"$IconPath" -r -sfx -z"$ConfigFilePath" `
    "$InstallerName" "$SourceFilesPath\*" | Out-Null

WinRAR 有命令行开关可以让我填写版本和版权信息吗?如果没有,在构建 SFX 的 *.exe 文件后是否有某种方法可以填写该信息?

我能够通过手动将 VERSIONINFO 文件添加到 WinRAR 的 Default64.SFX 文件(在 WinRAR 的安装路径中找到)的副本,然后使用它来构建 SFX 来解决这个问题。以下是步骤:

  1. Default64.SFX 文件复制到硬盘上的某个位置(例如桌面)。
  2. 将您在 步骤 1 中复制的 Default64.SFX 文件重命名为 Default64.exe
  3. 在Visual Studio中打开Default64.exe(您可能需要打开Visual Studio、select 文件->打开->文件,然后单击打开按钮右侧的箭头,然后单击打开方式...。然后在打开的 Open With 对话框中,select Resource Editor 并单击 OK 按钮).
  4. 如果没有 Version 文件夹,请右键单击顶级文件夹(名为 Default64.exe)并单击 Add Resource. Select Version 并单击 New 按钮。如果有 Version 文件夹,只需双击文件夹中的文件即可。
  5. 更改您需要的所有元数据并保存所有内容。
  6. 关闭Visual Studio.
  7. Default64.exe 重命名回 Default64.SFX
  8. 将 PowerShell 调用更改为 WinRAR 的命令行可执行文件,并在 -sfx 开关中指定您修改的 Default64.SFX 文件的路径:
&$WinRarInstallPath a -cfg- -ep1 -iadm -iicon"$IconPath" -r -sfx"C:\path\to\Default64.SFX" ` 
    -z"$ConfigFilePath" "$InstallerName" "$SourceFilesPath\*" | Out-Null