WinRAR SFX 可选消息但不在临时模式下

WinRAR SFX optional message but not in temp mode

如果我正在创建 SFX 存档,我可以通过启用临时模式(文件被解压到临时文件夹)来设置一个可选问题,当用户 运行 提取程序。

但是,通过启用临时模式,它会完全忽略 "Extract to path" 设置。但是如果我关闭Temp Mode,问题就没有了!

我怎样才能将它提取到我想要的路径,同时又能够设置那个可选问题?

在对话框高级音效选项选项卡模式上按下按钮帮助后打开的帮助页面] 包含段落

If Unpack to temporary folder option is set, you should also specify Setup program. SFX ignores Path to extract parameter in this mode.

原因很简单,在帮助中的这段上面已经解释过了。通过将存档解压缩到临时文件夹,调用的安装应用程序(*.exe、*.bat、...)负责将文件复制到安装文件夹。

但是如果您希望 WinRAR SFX 将压缩包直接解压到预定义的文件夹中,并且您希望让用户可以在开始解压前取消安装:

  1. 不要使用选项卡 Modes.
  2. 上的解压到临时文件夹
  3. 而是在选项卡 常规 上设置 提取路径
  4. Select 在选项卡 模式.
  5. 上显示全部
  6. Select 提取和替换文件提取和更新文件 更新 覆盖所有文件
  7. 在选项卡上为用户输入有用的文本 文本和图标 在编辑字段中 要在 SFX 中显示的文本 window其中包含相关信息,以便用户可以决定何时按下按钮 ExtractInstall 以及何时按下按钮 Cancel 在执行 SFX 存档时。

另一种可能性是在选项卡 License 上输入标题和问题文本作为 License text 导致执行 SFX 存档首先显示对话框 "license text" 现在是按钮 AcceptDecline.

的问题

第三种可能性是用不同的名称创建您要使用的 SFX 的副本,并使用免费工具 Resource Hacker 根据您的需要自定义此 SFX,即更改图标、位图、按钮的文本和对话框中的位置,对话框的大小等。这是明确允许的,因为您可以在标题为 GUI RAR 和 ZIP 的页面上阅读 WinRAR 的帮助SFX 模块(Default.SFX 和 Zip.SFX)。例如,您可以在自定义 SFX 中重新定义许可证对话框的布局,使其看起来类似于带有按钮 YesNo 的问题消息框。我将此解决方案用于 2 个 installed/updated 带有 WinRAR SFX 存档的应用程序,使用 Resource Hacker 创建这样的自定义 SFX 真的很容易。

要创建提取包并保留问题框功能:

1: 随心所欲地创建解压包。

2:使用WinRar,编辑注释文件添加TempMode="Run App?","Example Title"

示例:TempMode="Install MyApp?","Vista ◦ MyApp 2.0 ◦ x32/64"

@约翰...

这在理论上听起来不错,但行不通。


问题:

一旦 RAR 检测到 TempMode= 开关,它就会忽略 Path= 并提取到 %TMP%。 在 TempMode 中,WinRar 会在安装完成后自动删除 %TMP% 文件。

问题是,有时 WinRar 会在安装完成之前删除文件。 在某些软件包上,选中等待命令会使 WinRar 等待完成。

在需要重启的软件包中,%TMP% 文件丢失。 为了询问用户 "Install Example App?" 然后提取文件、重新启动并完成设置,我不得不使用一些小技巧,这可能会对上面的用户有所帮助。

1: 像往常一样创建 SFX > TempMode,所以你有 "Install Example App?" 框。

2: Setup=xCopy > 使用 xcopy 命令将文件复制到所需目录

3:设置=示例应用程序

通过将文件复制到新位置,它们不会在 SFX 关闭后被删除。


备选方案#2

确定要将文件解压缩到的位置。 示例:%TMP%\Folder\App.exe

创建 TempMode SFX "Install Example App?" 设置=%TMP%\Folder\App.exe

创建包含您的文件的新 SFX + TempMode SFX 路径=%TMP%\Folder\TempModeSFX.exe

运行 SFX > "Install Example App?" 出现 > 如果 "Yes",应用运行。


备选方案3:

还有一种方法是创建Path=SFX,打包成TempMode SFX方法,但这会导致包被解压到%TMP%,然后将文件解压到选择的位置,或者双重解压。

这也可行,但方法 2 的效果更好,需要预先考虑并计划好文件的提取位置。

希望对您有所帮助!