C#、背景音乐、发布文件、ILMerge、一个exe文件

Posted

技术标签:

【中文标题】C#、背景音乐、发布文件、ILMerge、一个exe文件【英文标题】:C#, background music, release files, ILMerge, one exe file 【发布时间】:2015-01-27 08:18:13 【问题描述】:

我在 Visual Studio 2013 Ultimate 中制作了一个游戏。游戏有声音和背景音乐。声音通过“SoundPlayer”(点击按钮)播放,bcg 音乐通过“WindowsMediaPlayer”播放。所有 .wav 文件都位于“资源”中,除了 bcg 音乐文件。该文件放置在 bin/Debug/ 中(或在 Bin/Release/ 中发布之后),因为 WMplayer 无法从资源中播放它(WMplayer 只有属性 URL 并且“player.URL = Properties.Resources.backgrounmusicfile”不起作用)。现在我有了带有 exe 文件、dll 和 bcg 音乐 wav 文件的 Release 目录。当我尝试将它与“ILMerge”合并到一个 exe 文件中时,它不会合并 bcg 音乐 wav 文件。总而言之,我在同一目录中有 1 个合并的 exe 文件和 1 个 bcg 音乐 wav 文件,可以正常运行游戏。我的目标是只有一个 exe 文件。是否存在任何方式如何达到这一点? 谢谢。

【问题讨论】:

这个问题似乎对你有帮助...***.com/questions/8333340/… 你问的是安装文件吗?软件产品通常(不总是)使用安装包分发,NSIS 可以生成单个 exe 安装。如果您的意思是应用程序的单个 exe,那么您有一个问题 - WMP 和资源 (click),可能的解决方案是在您的应用程序启动时从资源中提取 wav(到临时或缓存文件夹)。 ILMerge 只合并程序集,它不能合并 wav,除非 wav 在程序集(资源)内部。 我尝试了这些技巧,但似乎无法解决。我决定将其保留为两个文件夹(.exe 文件 + .wav 文件)。感谢您的时间和帮助。 【参考方案1】:

ILMerge 仅支持 .Net 程序集。 ILMerge 无法将某些数据文件“嵌入”到 exe 中。

您需要的是所谓的应用程序虚拟化:文件的模拟。该方法基于钩子。每个与文件子系统相关的系统调用都被拦截和预处理。这允许模拟文件和目录,因此进程“认为”这些文件确实存在。

很遗憾,我不知道免费的解决方案,但有第三方解决方案。

使用BoxedApp SDK,您需要使用您的 wav 文件数据创建一个虚拟文件(请参阅 BoxedAppSDK_CreateVirtualFile)。

使用BoxedApp Packer,您需要创建一个项目,指定您的主exe 作为输入exe,并将WAV 文件放入特殊文件夹<ExeDir>。最终打包的 exe(需要的单个 exe)将在 WAV 文件确实存在时工作。

【讨论】:

以上是关于C#、背景音乐、发布文件、ILMerge、一个exe文件的主要内容,如果未能解决你的问题,请参考以下文章

c#如何合并多个dll文件

ILMerge合并多个 DLL,简化发布

c# winform 中 怎样把dll封装到exe中

C# 类库 嵌入其他Dll

微软工具ILMerge

IlMerge 后的 C++/CLI 应用程序错误