您的位置:首页 > 编程语言 > C#

C#自身包含其他应用程序(或者文件)并在运行时调用

2011-09-21 13:23 363 查看
转自/article/11395593.html

kangkanglx

今天一个同事问我,怎么把Dll动态链接库直接嵌入到C#开发的应用程序本身,让C#在发布出去的时候,只是一个.exe的文件,而不是一个文件夹。我仔细思索了一下这个问题。发现这个问题其实可以总结为一个比较普遍的问题,那就是怎样把不同种类的文件包含到C#开发的应用程序自身内,然后变成一个.exe的文件给用户发布出去。

其实,思路还是比较简单的,我们首先把需要包含到应用程序本身的文件作为外部的资源文件加入到程序中,然后在程序运行的时候,由程序自己自动把资源文件给释放出来,实际上就达到了,即可包含不同文件在应用程序内,又可以随时释放该文件并使用的目的。

(1)首先,我们使用VS2005新建一个WindowsForm的开发程序(说个题外话,虽然现在我在公司用的都是VS2010了,但是我还是喜欢VS2005,因为我觉得,只要VS2005都运行的起的程序,VS2010肯定也可以运行。不过,最主要的还是因为我家这个电脑太恼火了,拖起VS2005都已经很卡了,所以就没有装VS2010了)。



(2)然后,我们为了测试一个Dll包含到应用程序本身,并保证该应用程序在调用该Dll以后正常运行,我现在用VS里面提供的带DLL的控件,Media Player做一个演示。现在我们要添加该控件,选择‘菜单’-‘工具’-‘工具箱项’,如下图:



(3)我们选择COM选项卡,选择Media Player 这个mp3播放控件,选择完成后,我们会在工具箱中,发现新添加的这个Media Player控件。





(4)于是我们直接把这个控件,拖动到WindowForm窗体上。此时,一个播放器,就弄好了。



(5)这个时候我们编译这个应用程序,会发现,在我们应用程序Bin/Debug目录下,不但有KContainer这个应用程序,还有2个dll和MediaPlayer相关的动态链接库。



(6)按照常理来说,如果我们要发布我们的这个播放器应用程序,我们就必须把额外的这个两个dll文件包含在和这个应用程序一样的文件目录。但是这样的话,太影响美观,而且也不便于传输给别人使用,毕竟这样看起来平白无故的要多了2个文件,那么我们如何才能让我们自己只发布一个KContainer程序给别人,然后这个应用程序能照样正常使用我们这个播放器呢?答案实际上很简单,我们只需要在我们使用的时候把这个两个文件释放出来,不使用的时候删除就行了。既然要释放,那就涉及到包含。要包含很容易就想到资源文件了,所以,现在我们要把这两个Dll动态链接库,作为KContainer的资源文件包含在KContainer里面。当然其他文件类型的包含也是一样的,只不过这里包含的是Dll文件。我反正成功包含过EXE文件(又给一些想做病毒的同胞们提供了思路了。。。。)。

(6, 1)我们首先把这个两个动态链接库,以资源的形式导入到我们的工程文件中。在这里,我先建立一个MyDll的文件夹用于存放这两个文件。



(6, 2)然后,我们引入刚才我们生成的两个DLL动态链接库文件(其他文件格式的包含方式如同这个两个DLL的操作步骤一样)

(6,2,1)引入这两个动态链接库


(6,2,1)

(6,2,2)引入后修改这两个动态链接库的属性为嵌入资源


(6,2,2)

(6, 3)到此,所有工作都已经准备就绪了,剩下的工作,就是等待在窗体自己启动的时候,把这两个DLL释放出来,然后,就可以大功告成了。不过一定要记住,释放的代码必须要放在构造函数里面且放在控件初始化代码之前,否则在控件在初始化的时候找不到动态链接库,程序会无情的被操作系统结束掉,当然最后使用完这些链接库的删除,在这个地方就不在叙述了。以下为释放出这两个资源的代码。



(7)现在我们编译调试,然后把生成的KContainer.exe应用程序拷贝到其他地方运行一下,会发现,当我们运行这个应用程序的时候,这个程序会自动释放这两个Dll动态链接库出来。感觉是不是很爽?其实所有文件比如什么DOC,XLS,EXE,TXT等格式的文件都可以这样操作,把他们包含在这一个应用程序里面,然后在需要的时候释放他们,这个时候,你要传给人家的只是一个exe文件而已。

工程文件下载地址(663KB):http://www.aozoz.com/Code/KContainer/KContainer.rar

如有任何问题可以发邮件到:Email:k.liuxu@gmail.com或者加QQ:583936908

以上文章由康康撰写,劳动成果来之不易,转载时请注明出处
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐