好吧,所以我正在用C#编写我自己的安装程序,而我想要做的就是将文件放在.exe中,这样我就能做到 File.Copy(file,filedir);
或者,如果这是不可能的,还有另一种方法可以做我想做的事情吗?
答案 0 :(得分:30)
我不会编写自己的安装程序代码,但如果您真的想将文件嵌入到程序集中,则可以使用强类型资源。在项目的属性对话框中,打开“资源”选项卡,然后添加文件。然后,您将能够使用以下方式获取文件:
ProjectNamespace.Properties.Resources.MyFile
然后,您将能够使用以下方法将嵌入式资源写入磁盘:
System.IO.File.WriteAllBytes(@"C:\MyFile.bin", ProjectNamespace.Properties.Resources.MyFile);
答案 1 :(得分:9)
老实说,我建议你不要创建自己的安装程序。创建安装程序有很多问题。即使是大型安装程序制造商也不再制作他们自己的实际安装程序,他们只是创建自定义MSI包。
使用Mirosoft Installer(MSI)。这是正确的做法。为它制作自己的自定义前端,但不要重新创建已存在的非常复杂的轮子。
更新:如果您只是为了学习而这样做,那么我会回避将其视为“安装人员”。你有可能想要接受你的“研究”并在某一天使用它,坦率地说,当新版本的Windows出现时,我们最终会遇到这么多问题。人们创造自己的轮子,假设是无效的。
你真正想做的事情被称为“打包”,你真的必须熟悉可执行的PE格式,因为你正在谈论改变磁盘上PE图像的结构。
您可以将文件放入资源中来模拟它,但这并不是安装程序或自解压程序所做的。
这是Self-Extractor教程的链接,但它不在C#中。
我不太了解.NET PE的要求,知道你是否可以使用托管代码可执行文件执行此操作。
UPDATE2:这可能是你正在寻找的更多内容,它将文件嵌入资源中,但正如我所说,它并不是专业安装程序或自解压程序的方式。我认为你可以嵌入什么资源有各种限制。但这就是用C#编写的Self-Extractor Demo。
答案 2 :(得分:4)
我在这里猜测,但如果您在编译之前尝试在应用程序中存储资源,则可以在Project Explorer中右键单击要添加的文件,选择属性并将类型更改为Embedded Resource。
然后,您可以使用此KB中的说明访问嵌入式资源: http://support.microsoft.com/kb/319292
答案 3 :(得分:0)
如果您只想将多个文件存储在单个文件存储中(并从那里提取文件,进行交互等),您可能还需要查看NFileStorage,.net file storage。用100%.NET C#编写,包含所有源代码。它还附带一个命令行解释器,允许从命令行进行交互。