2012-03-07 15 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的窗口框,但是如果你遇到了一个,对安装程序的失败情况有任何控制权...

相关问题