将dll文件嵌入exe程序

最近在开发一个安装程序, 需要将dll文件嵌入到exe中, 保证编译出来的程序只有一个 .exe 文件

  1. 首先定义个函数用来动态获取dll文件

private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
     string resourceName = "MyProject." + new AssemblyName(args.Name).Name + ".dll";
     using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
     {
          byte[] assemblyData = new byte[stream.Length];
          stream.Read(assemblyData, 0, assemblyData.Length);
          return Assembly.Load(assemblyData);
     }
}

  2. 在Main函数中 添加一行代码, 在程序解析程序集失败事件触发时 调用上面的方法动态加载程序集

AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);

  3. 将需要嵌入的dll文件添加到工程中 在文件的属性面板中 生成操作属性修改为嵌入资源  否则在exe中将找不到该dll文件 

  

  4. 在项目的应用中仍然需要添加对该 dll文件的应用, 否则编译无法通过 , 但是将引用的dll文件的属性面板中 复制到本地的属性修改为 False,

  

原文地址:https://www.cnblogs.com/applebox/p/11611551.html

时间: 2024-10-01 09:02:03

将dll文件嵌入exe程序的相关文章

Windows下游戏程序使用32位的dll文件-解决“应用程序无法正常启动0xc000007b”问题

Windows7下刚刚安装完游戏,启动游戏时缺失dll文件,在游戏安装目录下补充之后启动出现错误: 应用程序无法正常启动0xc000007b 找到原因是在添加dll文件时使用了适合64位系统的dll文件,应该使用适合32位系统的dll文件(尽管系统为64位). 参考链接:应用程序无法正常启动0xc000007b怎么解决 猜测原因是可能游戏制作时使用的全部是适合32系统的动态链接文件.

pyinstaller 打包python文件成.exe程序

使用pycharm写好的代码,每次都要使用pycharm来执行比较麻烦,打包成.exe程序后可以直接运行,还可以发到别的电脑上执行,比较方便. 1.打开cmd命令提示符窗口,cd到pip.exe所在的目录,使用pip.exe install pyinstaller命令安装pyinstaller模块(前提是你的电脑已经安装了python),安装完成后会在目录下生成很多py文件. 2.使用命令pyinstaller -c -F weixin.py生成weixin.exe程序 执行完之后会在当前目录下

将bat文件或exe程序注册成windows服务

命令行使用sc命令.关于sc命令的详解,请自行查看帮助(sc /?),在此只简单提及如何加入系统服务功能.加入服务:sc create ServiceName binPath= 路径 start= auto(等号后面的空格必须)删除服务:sc delete ServiceName例一:将Tomcat加入到系统服务中:sc create Tomcat binPath= F:/apache-tomcat/bin/startup.bat start= auto将Tomcat服务删除:sc delete

C# 将已有程序封装为DLL文件,供其他程序调用

如果开发的程序很大,功能很复杂,载入时就很慢,用户感受不好,因此可以将一些功能分开,单独封装为DLL文件,当程序运行时有需要时才调用,加快程序响应速度. 在网上搜索了一下,其实过程比较简单: 打开工程---“解决方案”下方一行---属性---应用程序---修改“输出类型”为“类库”,F5编译程序即可. 此时,会有错误提示如下: ---------------------------Microsoft Visual Studio---------------------------无法直接启动带有

C#中 dll文件放在子目录中的方法

VS2012-C# dll文件直接放在程序根目录中(和exe文件一起)比较乱,可以将dll文件放在子文件夹中.步骤如下: 1.将dll文件放入子文件夹 2.添加引用 解决方案资源管理器中,中 工程名或者“引用”上右键,选中添加引用. 中引用管理器中,点击浏览,选中子文件夹中的dll文件. 3.修改dll文件的引用属性 点击添加成功的引用,将“复制本地”改成false(不然程序运行的时候会将子文件夹下的dll文件复制到根目录中). 4.添加引用的地址,修改config文件 在根目录中打开“软件名.

lib和dll文件的区别和联系

什么是lib文件,lib和dll的关系如何 (2008-04-18 19:44:37)    (1)lib是编译时需要的,dll是运行时需要的. 如果要完成源代码的编译,有lib就够了. 如果也使动态连接的程序运行起来,有dll就够了. 在开发和调试阶段,当然最好都有. (2)一般的动态库程序有lib文件和dll文件.lib文件是必须在编译期就连接到应用程序中的,而dll文件是运行期才会被调用的.如果有 dll文件,那么对应的lib文件一般是一些索引信息,具体的实现在dll文件中.如果只有lib

调试带有源代码的DLL文件

工作环境:dll源代码是c,在Visual studio 2010中调试. 第一步,调试的准备. 用C#语言编写一个测试dll文件的程序,由于dll源程序是c的,且运行结果是黑屏的,所以C#代码也是运行在黑屏的console环境下.完整代码如下. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; na

VC++中.DLL文件与.LIB文件关系

一般的LIB文件是"导入库",用来提供给link.exe,作为链接DLL--也就是"动态链接库"的依据.里面记录了类似下面的信息:调用函数xxx(),连接到x.dll的0xABCDEFGH地址:-- 早期的LIB,是"静态链接库",也是用来提供给link.exe,作为链接代码用的.里面的记录如下:调用xxx(),其代码是--:DLL的LIB(导入库),不含可执行的具体代码(代码在DLL中).而最早的LIB(静态链接库),里面含有代码.所以,可以看

C# 怎么生成DLL文件(转)

有两种方法:    但是一般这个使用 打开VS2008,依次点击:菜单->文件->新建项目->项目类型visual C#(这里假设为该项目所取的名字是DllBuild)->类库(注意必须是类库),即新建一个由纯.cs 类库文件组成的程序集,写好代码之后(例如写了一个名为DllTest.cs的类,该类的namespace取名为DllTestNS),再依次点击:菜单->生成->生成DllBuild,这样你的DllBuild/DllBuild/bin/Debug文件夹或者Dl