35

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

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

4

4 回答 4

32

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

ProjectNamespace.Properties.Resources.MyFile

然后,您将能够使用以下方法将嵌入式资源写入磁盘:

System.IO.File.WriteAllBytes(@"C:\MyFile.bin", ProjectNamespace.Properties.Resources.MyFile);
于 2009-02-08T23:28:54.283 回答
9

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

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

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

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

在某种程度上,您可以通过将文件放入资源中来模拟它,但这并不是安装程序或自解压器所做的。

这是Self-Extractor教程的链接,但它不在 C# 中。

我对 .NET PE 要求知之甚少,不知道您是否可以使用托管代码可执行文件来执行此操作。

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

于 2009-02-08T21:25:24.237 回答
4

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

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

于 2009-02-08T21:13:42.453 回答
0

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

于 2009-04-27T21:12:55.517 回答