L.J*_*.J. 5 .net installer 7zip sfx
我正在尝试为我编写的Windows应用程序创建一个自解压存档.我的应用程序使用最新的.Net 4.0,我想在SFX安装程序中包含.Net设置.但是,如果计算机需要安装.Net框架并重新启动,则无法正常恢复安装我的应用程序.我查看了堆栈站点上的其他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 *
Run Code Online (Sandbox Code Playgroud)
接下来,我使用7zS.sfx文件(用于创建自解压安装程序),配置文件和存档进行二进制复制.配置文件如下:
;!@Install@!UTF-8!
Title="MyApp Installer"
ExecuteFile="setup.exe"
;!@InstallEnd@!
Run Code Online (Sandbox Code Playgroud)
我用这条线复制它们:
copy /b 7zS.sfx + config.txt + AppInstallFiles.7z MyAppInstaller.exe
Run Code Online (Sandbox Code Playgroud)
安装程序完全适用于已经拥有.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,但如有必要,我会考虑使用其他工具.
问题是 SFX 在 setup.exe 完成后删除了提取的文件。为了避免这种情况,您可以使用InstallPath参数:
;!@Install@!UTF-8!
Title="MyApp Installer"
ExecuteFile="setup.exe"
InstallPath="%temp%\\My App"
;!@InstallEnd@!
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,提取的文件根本不会被删除。例如,您可以删除 MSI 中的这些文件。
附言。如果您的客户将通过远程桌面会话运行安装程序,您还需要考虑此问题