如何从与可执行文件相同的zip文件中提取特定文件



我知道有几个库允许我从zip中提取文件(DotnetZip、SharpZipLib等),但是执行提取的可执行文件是否可能位于从中提取特定文件的同一zip文件中?

这是我的愿景:

1) 用户双击zip文件以查看其内容。2) 双击exe3) 该exe从包含它的zip中提取一些文件,并将其提取到指定的目录中4) 该目录现在具有所需的文件。5) 运行此目录中的exe。

我知道,这听起来很像现有的SFX解决方案。然而,这些似乎都无法满足我在这个问题中描述的需求:如何构建一个作为单个独立文件/实体(无安装程序)分发的.Net应用程序?

我知道这些要求听起来很奇怪。如果我可以更改Powers That Be,我只需要提供一个MSI和一两个XML文件来进行配置。

当然,我欢迎批判性的反馈和问题。

除非从端到端控制流程,否则您真的无法做到这一点。

当您在Windows中双击zip文件(从XP开始)时,它会显示内容。当您双击zip中的文件时,它会将该文件复制到一个临时目录,然后从那里执行您的文件(或将适当的shell处理程序应用于该文件)。

当这种情况发生时,可执行文件(或处理文件类型的可执行文件)不会得到任何特殊的参数/环境变量/指示符,它们会说"嘿,我在zip中",就文件而言,你只是在另一个目录中。

此外,shell并不是唯一一个可以处理.zip文件类型的程序;有很多实用程序可以,它们都会以不同的方式处理双击zip中的文件

当然,他们可能都使用一个临时目录将文件复制到,但没有任何东西迫使他们(按照惯例或通过API)以相同的方式进行复制。

如果你要这样做,那么你真的必须分发一个EXE,它将从头到尾控制zip进程(你可以将真正的可执行文件打包为文件中的资源)。

自解压exe就是为此而发明的。

这个引导程序可能是最好的C(++),或者不依赖于运行时的东西,很少有没有.net的窗口框,但如果你遇到了一个,你就无法控制安装程序的失败。。。。

相关内容

  • 没有找到相关文章

最新更新