1

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

这是我的愿景:

1) 用户双击压缩文件查看其内容。2) 双击一个 exe 3) 该 exe 从它包含的 zip 中提取一些文件到一个指定的目录 4) 这个目录现在有所需的文件。5) 运行此目录中的 exe。

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

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

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

4

2 回答 2

0

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

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

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

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

诚然,他们可能都使用临时目录将文件复制到其中,但没有什么会迫使他们(按照惯例或通过 API)以相同的方式执行此操作。

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

于 2012-03-07T22:16:35.467 回答
0

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

这个引导程序可能最好用 C(++) 编写,或者不依赖于运行时的东西,很少有没有 .net 的 windows 盒子,但如果你遇到一个,你就无法控制您的安装程序如何失败....

于 2012-03-07T22:24:59.453 回答