2012-03-07 16 views
1

我知道有幾個庫允許我從zip(DotnetZip,SharpZipLib等)中提取文件,但是可執行文件是否可以執行提取要在同一個zip文件中提取特定的文件?如何從與可執行文件相同的zip文件中提取特定文件

這是我的願景:

1)用戶雙擊一個zip文件,以查看其內容。 2)雙擊一個exe 3)該exe文件從其包含的zip文件中提取幾個文件到指定的目錄中 4)該目錄現在具有所需的文件。 5)運行該目錄中的一個exe文件。

我知道,這聽起來很像現有的SFX解決方案。但是,這些似乎都不能滿足我在這個問題中描述的需求:How can I build a .Net application which is distributed as a single and self-contained file/entity (no installer)?

我知道這些要求聽起來很奇怪。如果我可以改變那些力量,我只會發佈一個MSI和一個或兩個XML文件進行配置。

當然,我歡迎批評意見和問題。

回答

0

除非您控制端到端的流程,否則您確實無法做到這一點。

當您雙擊Windows中的zip文件(自XP以來)時,它會顯示您的內容。當你雙擊這個zip文件時,它將該文件複製到一個臨時目錄,然後從那裏執行你的文件(或適當的shell處理程序應用於該文件)。

發生這種情況時,就您的文件而言,您的可執行文件(或處理文件類型的可執行文件)沒有得到任何說「嘿,我在zip中」的特殊參數/環境變量/指示符,你只是在另一個目錄中。

此外,shell不是只有程序可以處理.zip文件類型;有很多實用程序可以,並且他們都將以不同的方式處理雙擊文件上的zip文件。當然,它們可能都使用臨時目錄來複制文件,但沒有任何東西強迫它們(按照慣例或通過API)以這種方式執行相同的方式。

如果你要做到這一點,那麼你真的不得不分發EXE將控制從開始的zip進程結束(你可以打包真正可執行文件作爲該文件中的資源)。

0

自解壓exe是爲此而發明的。

這個引導程序可能是最好的C(++),或者不依賴於運行時的東西,有很少幾個沒有.net的窗口框,但是如果你遇到了一個,對安裝程序的失敗情況有任何控制權...

相關問題