我已经构建了一个控制台应用程序,当它从Program Files引用.exe文件时可以正常工作,但是我的用户可能没有在他们的Program Files目录中有.exe。
为了简单起见,我宁愿将软件包保留为单个.exe,所以我想知道如何将两个.exe组合到一个软件包中。
我想到的一件事是将.exe从Program Files目录压缩到临时位置,我会将zip存档的二进制数据存储在我的控制台应用程序源代码中。这是最好的方法还是有更好的方法?
注意我没有我想在控制台应用程序中引用的.exe的源代码。
答案 0 :(得分:3)
您当然可以将.exe(或.dll)中的额外文件存储为嵌入式资源。只需将项目中项目的“构建操作”更改为“嵌入式资源”即可。您可以使用以下命令检索文件的内容(如果您愿意,可以压缩):
System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("stream name")
您可以将文件解压缩到磁盘上以便能够引用它,或者您可以使用其中一个Assembly.Load()变体直接加载它,因此您无需将其存储在磁盘上。
请注意,如果您确实选择将其解压缩并将其存储在磁盘上,则需要在Vista和Windows 7(以及正确管理的XP)操作系统上具有管理员权限才能将文件保存到Program Files 。目录
答案 1 :(得分:2)
您可以使用GZipStream压缩和解压缩C#中的文件。对于更复杂的压缩,您可以使用其他Zip库,如SharpZipLib。
答案 2 :(得分:0)
请看一下这个链接:Embedding assemblies inside another assembly
基本上,ILMerge会做你想要的。