从压缩的“zip”文件运行.Net应用程序

从压缩的“zip”文件运行.Net应用程序,.net,zip,exe,.net,Zip,Exe,例如,我需要创建一个轻量级的.Net应用程序,它可以通过电子邮件附件轻松分发。我可以从ZIP运行EXE,但是从ZIP运行时,我似乎无法让EXE引用任何外部配置文件,如EXE.config或任何其他XML文件 当EXE使用EXE.config文件中的数据时,是否无法从zip文件运行EXE 我已经回顾了这个问题: 但我认为他正试图解决一个与我不同的问题 我相信我的问题与此类似: 但是,这个问题的答案提供了一个明确的解决方案。这是不可能的,因为ZIP中的其他文件需要先解压缩,然后才能被.exe使用。

例如,我需要创建一个轻量级的.Net应用程序,它可以通过电子邮件附件轻松分发。我可以从ZIP运行EXE,但是从ZIP运行时,我似乎无法让EXE引用任何外部配置文件,如EXE.config或任何其他XML文件

当EXE使用EXE.config文件中的数据时,是否无法从zip文件运行EXE

我已经回顾了这个问题:

但我认为他正试图解决一个与我不同的问题

我相信我的问题与此类似:


但是,这个问题的答案提供了一个明确的解决方案。

这是不可能的,因为ZIP中的其他文件需要先解压缩,然后才能被.exe使用。

这是不可能的,因为ZIP中的其他文件需要先解压缩,然后才能被.exe使用。

有可能吗?那么让我们看看这里的情况

zip是一种存档格式。它没有具体说明一个问题;相反,zip文件是通过文件中任何位置存在的标记记录zip条目来标识的

在windows中,EXE是一种由幻数定义的文件格式。它允许在文件中包含任意数据和特别标记的位置

将这两者结合起来,文件可以同时是exe和zip。这种可能性在生成exe时被利用,exe将自身读取为zip文件并提取其中包含的条目。SFX基本上由一些存根exe逻辑组成,这些逻辑知道如何读取和提取任何zip文件,再加上一组可变的zip条目记录

您的需求—一种自解压的归档格式,然后从解压的内容运行特定的文件—需要一个SFX存根,该存根的功能仅略高于标准存根。它必须提取文件,然后运行其中一个文件

是一个基于.NET的zip库,允许您的.NET应用程序生成zip文件,包括SFX文件。DotNetZip提供的SFX存根包括在提取后调用其中一个提取文件的功能。提取后运行的命令不需要是.NET可执行文件,但可以是。当然,由于exe及其配置文件已被提取,因此exe可以成功运行,并且可以访问.config文件。这应该符合你的要求

在代码中,使用DotNetZip生成运行后期提取命令的SFX如下所示:

string DirectoryPath = "c:\\Documents\\Project7";
using (ZipFile zip = new ZipFile())
{
    zip.AddDirectory(DirectoryPath, System.IO.Path.GetFileName(DirectoryPath));
    zip.Comment = "This will be embedded into a self-extracting console-based exe";
    SelfExtractorOptions options = new SelfExtractorOptions();
    options.Flavor = SelfExtractorFlavor.ConsoleApplication;
    options.DefaultExtractDirectory = "%USERPROFILE%\\ExtractHere";
    options.PostExtractCommandLine = "%USERPROFILE%\\ExtractHere\\MyApp.exe";
    options.RemoveUnpackedFilesAfterExecute = true;
    zip.SaveSelfExtractor("archive.exe", options);
}

DotNetZip是免费使用的

可能吗?那么让我们看看这里的情况

zip是一种存档格式。它没有具体说明一个问题;相反,zip文件是通过文件中任何位置存在的标记记录zip条目来标识的

在windows中,EXE是一种由幻数定义的文件格式。它允许在文件中包含任意数据和特别标记的位置

将这两者结合起来,文件可以同时是exe和zip。这种可能性在生成exe时被利用,exe将自身读取为zip文件并提取其中包含的条目。SFX基本上由一些存根exe逻辑组成,这些逻辑知道如何读取和提取任何zip文件,再加上一组可变的zip条目记录

您的需求—一种自解压的归档格式,然后从解压的内容运行特定的文件—需要一个SFX存根,该存根的功能仅略高于标准存根。它必须提取文件,然后运行其中一个文件

是一个基于.NET的zip库,允许您的.NET应用程序生成zip文件,包括SFX文件。DotNetZip提供的SFX存根包括在提取后调用其中一个提取文件的功能。提取后运行的命令不需要是.NET可执行文件,但可以是。当然,由于exe及其配置文件已被提取,因此exe可以成功运行,并且可以访问.config文件。这应该符合你的要求

在代码中,使用DotNetZip生成运行后期提取命令的SFX如下所示:

string DirectoryPath = "c:\\Documents\\Project7";
using (ZipFile zip = new ZipFile())
{
    zip.AddDirectory(DirectoryPath, System.IO.Path.GetFileName(DirectoryPath));
    zip.Comment = "This will be embedded into a self-extracting console-based exe";
    SelfExtractorOptions options = new SelfExtractorOptions();
    options.Flavor = SelfExtractorFlavor.ConsoleApplication;
    options.DefaultExtractDirectory = "%USERPROFILE%\\ExtractHere";
    options.PostExtractCommandLine = "%USERPROFILE%\\ExtractHere\\MyApp.exe";
    options.RemoveUnpackedFilesAfterExecute = true;
    zip.SaveSelfExtractor("archive.exe", options);
}

DotNetZip是免费使用的

这是有道理的。就解决方案而言,我觉得我需要一个工具来将EXE及其相关文件打包到单个EXE中。似乎NBox可能会有所帮助:似乎是一个很好的解决方案,希望它对你有用!这是有道理的。就解决方案而言,我觉得我需要一个工具来将EXE及其相关文件打包到单个EXE中。似乎NBox可能会有所帮助:似乎是一个很好的解决方案,希望它对你有用!DotNetZip看起来很有前途。干得好,奇索!快速问题:RemoveUnpackeFilesAfterExecute属性的描述:在执行POSTNPACK命令后,是否删除已解压缩的文件。这个postenpack命令在哪里,我在文档中找不到它?可能是文档错误。它应该是命令行。运行该命令后,是否要删除已导出的文件
行动了?这是我怀疑的。我会告诉dpchiesa一个评论来修复…开玩笑。是的,我想删除这些文件。我将对此进行测试,看看我是否能从这个库中得到我需要的。SelfExtractorOptions需要什么参考?Ionic.Zip.SelfExtractorSaveOptions=new Ionic.Zip.SelfExtractorSaveOptions;DotNetZip看起来很有前途。干得好,奇索!快速问题:RemoveUnpackeFilesAfterExecute属性的描述:在执行POSTNPACK命令后,是否删除已解压缩的文件。这个postenpack命令在哪里,我在文档中找不到它?可能是文档错误。它应该是命令行。运行该命令后,是否要删除已提取的文件?这就是我所怀疑的。我会告诉dpchiesa一个评论来修复…开玩笑。是的,我想删除这些文件。我将对此进行测试,看看我是否能从这个库中得到我需要的。SelfExtractorOptions需要什么参考?Ionic.Zip.SelfExtractorSaveOptions=new Ionic.Zip.SelfExtractorSaveOptions;