2012-07-12 91 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