我试图创建一个自己编写的Windows应用程序的自解压压缩文件。我的应用程序使用最新的.Net 4.0,我想在SFX安装程序中包含.Net安装程序。但是,如果计算机需要安装.Net框架并重新引导,它将无法正确恢复安装我的应用程序。我通过对栈网站另SFX帖子看了看,但是他们都不是涉及.NET安装程序作为应用程序的先决条件问题。7zip的自解压缩档(SFX)和.Net安装
我的项目产生4个文件: “应用程序Installer.msi” “setup.exe” 文件 “WindowsInstaller-KB893803-V2-x86.exe程序” 和 “dotNetFx40_Client_x86_x64.exe”(文件夹 “WindowsInstaller3_1” 中)(文件夹中“DotNetFX40Client”),我相信这些都是标准的。
我用7zip的创建SFX如下:
首先,使用7zip的所有文件压缩成一个压缩文件:
7z.exe a -r AppInstallFiles.7z *
接下来,我做的7zS二进制副本.sfx文件(用于创建自解压安装程序),我的配置文件和存档。配置文件如下:
;[email protected]@!UTF-8!
Title="MyApp Installer"
ExecuteFile="setup.exe"
;[email protected]@!
我将它们复制与行:
copy /b 7zS.sfx + config.txt + AppInstallFiles.7z MyAppInstaller.exe
安装程序完美的作品已经具备.NET 4.0我的问题的计算机上出现哪些没有计算机上有.Net框架 - 我运行SFX,它将所有内容提取到临时目录。然后,当setup.exe识别出该计算机没有.Net 4.0时,它会调用.Net安装程序。这提取到它自己的临时目录并开始安装。完成后,它会提示重新启动。点击“否”退出整个安装。点击“是”重新启动计算机,并重新登录时出现错误:“尝试安装MyApp时发生错误”,详细信息为“无法找到应用程序文件”App Installer.msi'
看起来问题是,当安装手离开到.NET安装程序和.NET安装程序重新启动,包含我的应用程序安装文件的临时目录中删除。我试图从SETUP.EXE切换到使用“应用Installer.msi”然而,这只会导致msi报告,计算机没有.net并提示网络下载。因为我可能在离线情况下安装该应用程序,所以这对我不起作用。
有没有其他人试过以包括.NET安装程序在7zip的SFX之前,如果是他们是如何解决的呢?我宁愿如果可能的话继续使用7zip,但如果需要的话可以查看其他工具。
因此,作为临时解决方案,我创建了一个批处理脚本使用/ norestart标志调用两个更新(WindowsInstaller和dotNetFx40_Client_x86_x64)。这并不理想,因为a)如果已安装.Net安装程序步骤,此方法不会自动跳过,并且b)在使用应用程序之前,我无法传递一条消息通知用户重新启动。它还创建了一个cmd窗口,最好避免这个窗口。 – 2012-07-13 13:51:49