我正在尝试为我编写的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将所有文件压缩到单个存档中:
安装程序可以在已经安装了 .Net 4.0 的计算机上完美运行。我的问题出现在没有 .Net Framework 的计算机上 - 我运行 SFX,它将所有内容提取到临时目录中。然后,当 setup.exe 发现计算机没有 .Net 4.0 时,它调用 .Net Installer。这会提取到自己的临时目录并开始安装。完成后,它提示重新启动。点击“否”退出整个安装过程。点击“是”重新启动机器,在登录后会出现错误:“尝试安装 MyApp 时发生错误”,详细信息为“无法定位应用程序文件 'App Installer.msi'”。
问题似乎是当安装程序移交给 .Net 安装程序时,.Net 安装程序重新启动并删除包含 My App 安装文件的临时目录。我尝试从 setup.exe 切换到使用“App Installer.msi”,但这只会导致 msi 报告计算机没有 .Net 并建议进行网络下载。由于我可能在离线情况下安装应用程序,因此这对我没有用。
是否有其他人在 7zip SFX 中尝试过包含 .Net 安装程序,如果有,他们是如何解决的?如果可能的话,我更愿意继续使用 7zip,但必要时也会考虑其他工具。
我的项目生成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 Installer。这会提取到自己的临时目录并开始安装。完成后,它提示重新启动。点击“否”退出整个安装过程。点击“是”重新启动机器,在登录后会出现错误:“尝试安装 MyApp 时发生错误”,详细信息为“无法定位应用程序文件 'App Installer.msi'”。
问题似乎是当安装程序移交给 .Net 安装程序时,.Net 安装程序重新启动并删除包含 My App 安装文件的临时目录。我尝试从 setup.exe 切换到使用“App Installer.msi”,但这只会导致 msi 报告计算机没有 .Net 并建议进行网络下载。由于我可能在离线情况下安装应用程序,因此这对我没有用。
是否有其他人在 7zip SFX 中尝试过包含 .Net 安装程序,如果有,他们是如何解决的?如果可能的话,我更愿意继续使用 7zip,但必要时也会考虑其他工具。