【问题标题】:How To Store Files In An EXE如何将文件存储在 EXE 中
【发布时间】:2010-10-06 07:10:33
【问题描述】:

好的,所以我正在用 C# 编写我自己的安装程序,我想做的是将文件放入 .exe 中,这样我就可以做到 File.Copy(file, filedir);

或者,如果这不可能,是否有另一种方法可以做我正在尝试做的事情?

【问题讨论】:

  • 出于好奇,您为什么要编写自己的安装程序?
  • 人们总是告诉你“如果你想学习一门语言,就编码编码”,直到你真正编码了一些东西,然后他们都不要重新发明 TEH WHEEEEEEL
  • 学习编码并没有错,但是在编写生产代码时不应该重新发明轮子。
  • 当您对安装程序进行编程时,它并没有重新发明轮子,因为“轮子”还没有被发明出来。所有的安装程序都是方方正正的,还没有人发明出完美的安装程序。
  • @Rayne,祝福你的评论!我的下一个最爱是当他们说“你为什么要那样做?”

标签: c# file executable


【解决方案1】:

我不会编写自己的安装程序,但如果您真的想将文件嵌入到您的程序集中,您可以使用强类型资源。在项目的属性对话框中打开“资源”选项卡,然后添加您的文件。然后,您将能够使用以下方法获取文件:

ProjectNamespace.Properties.Resources.MyFile

然后您就可以使用以下方法将嵌入式资源写入磁盘:

System.IO.File.WriteAllBytes(@"C:\MyFile.bin", ProjectNamespace.Properties.Resources.MyFile);

【讨论】:

  • 感谢您的回复,这就是我要找的。好的,所以我正在使用 File.Copy();我需要文件路径的字符串重载。任何建议 PS-试过 .ToString();
  • 我在上面链接到你的c#项目有什么问题,完整的源代码?这不是你要找的吗?
  • 更新后展示了如何使用 System.IO.File.WriteAllBytes 将文件写入磁盘
  • 感谢您,我可能会将其用于配置工具,让用户在不同的 DLL 覆盖之间进行选择。这样我确信我不需要操作用户可能会弄​​乱或删除的应用文件夹中的外部文件。
【解决方案2】:

老实说,我建议您不要创建自己的安装程序。创建安装程序有很多问题。即使是大型安装程序制造商也不再制作自己的实际安装程序,他们只是创建自定义 MSI 包。

使用 Mirosoft 安装程序 (MSI)。这是正确的做法。为它制作自己的自定义前端,但不要重新创建已经存在的非常复杂的轮子。

更新:如果您只是为了学习而这样做,那么我会回避将其视为“安装程序”。有一天,您可能会很想进行“研究”并使用它,坦率地说,当新版本的 Windows 出现时,我们最终会遇到如此多的问题。人们用无效的假设创造自己的轮子。

您真正想要做的就是所谓的“打包”,而且您确实必须非常熟悉 Executable PE 格式,因为您谈论的是更改磁盘上 PE 映像的结构。

您可以在一定程度上模拟它,将文件放入资源中,但这并不是安装程序或自解压程序真正做的事情。

这里有一个指向Self-Extractor 教程的链接,但它不在 C# 中。

我对 .NET PE 要求了解得不够多,不知道您是否可以在托管代码可执行文件中执行此操作。

UPDATE2:这可能是您正在寻找的更多内容,它将文件嵌入到资源中,但正如我所说,这并不是专业安装人员或自解压器的真正方式。我认为你可以嵌入资源有各种限制。但这里是用 C# 编写的 Self-Extractor Demo

【讨论】:

  • 在编写自己的安装程序之前,我肯定会研究所有可用的安装程序。这就是我在“不要重新发明轮子,除非你打算进一步了解轮子”codinghorror.com/blog/archives/001145.html
  • 我这样做的唯一原因是,看看我是否可以。我不想让它成为 adv 或任何东西,只是尝试创建一个表单,当您单击安装时它只是将文件放在一个目录中。
  • S3thst4,一定要对可用的安装程序进行研究,但不要让反对者让你失望,大多数可用的安装程序还有很多不足之处,尤其是 MSI,肯定有很大的改进空间,安装人员不是在公园里散步,但要为硬嫁接做好准备。
【解决方案3】:

我在这里猜测,但如果您尝试在编译之前将资源存储在应用程序中,您可以在项目资源管理器中,右键单击要添加的文件,选择属性并将类型更改为嵌入式资源。

您可以稍后使用此 KB 中的说明访问嵌入式资源: http://support.microsoft.com/kb/319292

【讨论】:

    【解决方案4】:

    如果您只想将多个文件存储在单个文件存储中(并从那里提取文件、交互等),您可能还想查看 NFileStorage,.net file storage。用 100% .NET C# 编写,包括所有源代码。它还带有一个命令行解释器,允许从命令行进行交互。

    【讨论】:

      猜你喜欢
      • 2011-02-28
      • 2013-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-01
      • 2019-05-22
      相关资源
      最近更新 更多