我正在尝试为我编写的 Windows 应用程序创建一个自解压存档。我的应用程序使用最新的 .Net 4.0,我想在 SFX 安装程序中包含 .Net 设置。但是,如果计算机需要安装 .Net 框架并重新启动,它将无法正确恢复安装我的应用程序。我查看了 Stack 站点上的其他 sfx 帖子,但没有一个问题涉及将 .Net 安装程序作为应用程序的先决条件。
我的项目产生 4 个文件:“App Installer.msi”“setup.exe”“WindowsInstaller-KB893803-v2-x86.exe”(在文件夹“WindowsInstaller3_1”中)和“dotNetFx40_Client_x86_x64.exe”(在文件夹“DotNetFX40Client”中) ,我认为所有这些都是标准的。
我使用 7zip 创建 SFX,如下所示:
首先,使用 7zip 将所有文件压缩到一个存档中:
7z.exe a -r AppInstallFiles.7z *
接下来,我使用 7zS.sfx 文件(用于创建自解压安装程序)、我的配置文件和存档进行二进制复制。配置文件如下:
;!@Install@!UTF-8!
Title="MyApp Installer"
ExecuteFile="setup.exe"
;!@InstallEnd@!
我用以下行复制它们:
copy /b 7zS.sfx + config.txt + AppInstallFiles.7z MyAppInstaller.exe
安装程序在已经有 .Net 4.0 的计算机上完美运行 我的问题出现在没有 .Net Framework 的计算机上 - 我运行 SFX,它将所有内容提取到临时目录。然后,当 setup.exe 识别出计算机没有 .Net 4.0 时,它会调用 .Net 安装程序。这将提取到它自己的临时目录并开始安装。完成后,它会提示重新启动。点击“否”退出整个安装。点击“是”重新启动机器,重新登录时出现错误:“尝试安装 MyApp 时发生错误”,详细信息为“无法找到应用程序文件 'App Installer.msi'
问题似乎是,当安装程序移交给 .Net 安装程序并且 .Net 安装程序重新启动时,包含 My App 安装文件的临时目录被删除。我曾尝试从 setup.exe 切换到使用“App Installer.msi”,但这只会导致 msi 报告计算机没有 .Net 并建议进行 Web 下载。因为我可能在离线情况下安装应用程序,所以这对我不起作用。
之前有没有其他人尝试在 7zip SFX 中包含 .Net 安装程序,如果是,他们是如何解决的?如果可能,我更愿意继续使用 7zip,但如有必要,我会研究其他工具。