2012-07-12 205 views
5

我试图创建一个自己编写的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,但如果需要的话可以查看其他工具。

+0

因此,作为临时解决方案,我创建了一个批处理脚本使用/ norestart标志调用两个更新(WindowsInstaller和dotNetFx40_Client_x86_x64)。这并不理想,因为a)如果已安装.Net安装程序步骤,此方法不会自动跳过,并且b)在使用应用程序之前,我无法传递一条消息通知用户重新启动。它还创建了一个cmd窗口,最好避免这个窗口。 – 2012-07-13 13:51:49

回答

2

的问题是SFX SETUP.EXE完成后删除提取的文件。为了避免这种情况,你可以使用InstallPath参数:

;[email protected]@!UTF-8! 
Title="MyApp Installer" 
ExecuteFile="setup.exe" 
InstallPath="%temp%\\My App" 
;[email protected]@! 

但在这种情况下,提取文件将不会在所有被删除。例如,您可以在MSI中删除这些文件。

PS。如果您的客户将通过运行一个远程桌面会话的安装程序,您还考虑this issue

+0

实际上,7zip 9.20没有这个标志,虽然我已经看到它在多个地方提到过(参见http://sourceforge.net/projects/sevenzip/forums/forum/45798/topic/4626250 - 来自创作者, “7-Zip SFX不支持”InstallPath“变量,并且在文档中,唯一的参数是Title,BeginPrompt,Progress,RunProgram,Directory,ExecuteFile和ExecuteParameters。 我最终做了类似的事情 - 查看我的答案 – 2012-07-13 15:22:24

+0

另外,感谢在远程桌面问题上的负责人,但这对我来说不是问题,它似乎也可以提取到程序文件中的应用程序(假设)目录以避免它。不喜欢%programfiles%\ MYAPP文件夹存在的用户在使用其他地方安装应用程序时遇到的问题 – 2012-07-13 15:25:56

+2

我们使用来自http://7zsfx.info/en/的修改后的7zip SFX,它支持InstallPath和许多其他参数。 – 2012-07-17 07:27:24

2

我一个解决方案解决,我发现很可以接受的。由于问题导致sfx temp文件夹在重新启动时自行删除,我运行了批处理文件而不是setup.exe。该批处理文件移到临时目录拷贝一切到新目录中温度,并从那里调用设置:

::install.cmd, used to move the setup files to another directory before executing 
xcopy /s * ..\MY_APP\ 
::use start to hide the cmd window 
start ..\MY_APP\setup.exe 

此文件夹,然后坚持在重新启动,使设置继续。 serghei指出,这在技术上是一个问题,因为它持续到用户手动删除临时文件,但是由于我的应用程序的大小与现代硬盘相比,它是可以接受的

+0

这对我有效 – Sugrue 2012-09-20 13:25:16