将DLL文件直接封装进exe执行文件中(C#)

时间:2022-09-11 11:19:49

前言:由于项目需要,需制作一个注册机,将个人PC的MAC值和硬盘序列号与软件进行绑定,由于笔者的C++不是很好,所以采用C#进行开发。但在采用C#的时候,获取硬盘的MAC值和序列号的时候又不是很准确,所以这里采用C#调用C++封装的DLL文件,但是由于工具本身就小,就想将DLL文件直接封装进EXE执行文件中,于是有了下面的解决方法,该方法笔者已经实现,并投入了使用中。

具体解决方法如下:

1.首先在项目工程中加入一个文件夹,将所需DLL文件加载进来,笔者的项目目录如下图。

将DLL文件直接封装进exe执行文件中(C#)

2.双击Properties文件夹下的Resource.resx文件,选择“添加资源”->“添加现有文件”将FindDisk.dll文件加入项目中,并保存。

3.在程序启动时候,对system32文件夹下进行判断,判断是否存在我们所需的FindDisk.dll文件,如没有,就从资源文件中读取出来,并拷贝到system32目录下(64位操作系统会自动拷贝到C:\Windows\SysWOW64目录下)。代码如下:

        /// <summary>
        /// 将dll文件拷贝到系统目录
        /// </summary>
        private void copyDLL()
        {

            string finddiskPath = @"C:\Windows\System32\FindDisk.dll";//设置释放路径  

            string msvcrdllPath = @"C:\Windows\System32\msvcr100d.dll";//设置释放路径  

            //创建dll文件
            if (!File.Exists(finddiskPath))
            {
                byte[] finddiskDll = Resources.FindDisk;//获取嵌入dll文件的字节数组  

                using (FileStream fs = new FileStream(finddiskPath, FileMode.Create))
                {
                    fs.Write(finddiskDll, , finddiskDll.Length);
                }
            }

            //创建dll文件
            if (!File.Exists(msvcrdllPath))
            {
                byte[] msvcrDll = Resources.msvcr100d;

                using (FileStream fs = new FileStream(msvcrdllPath, FileMode.Create))
                {
                    fs.Write(msvcrDll, , msvcrDll.Length);
                }
            }
        }        

至此,对DLL文件的封装就告一段落,具体如何调用,这里不做过多赘述。

by Shawn Chen 2017.7.4晚

将DLL文件直接封装进exe执行文件中(C#)的更多相关文章

  1. 控件注册 - 利用资源文件将dll、ocx打包进exe文件(C&num;版)

    原文:控件注册 - 利用资源文件将dll.ocx打包进exe文件(C#版) 很多时候自定义或者引用控件都需要注册才能使用,但是如何使要注册的dll或ocx打包到exe中,使用户下载以后看到的只是一个e ...

  2. Python3&period;x:打包为exe执行文件(window系统)

    Python3.x:打包为exe执行文件(window系统) window系统下发布: 一.安装pyinstaller(PyInstaller 3.3.1) cmd安装命令: pip install ...

  3. Python脚本打包成exe执行文件

    需求 一个教辅目录结构检查工具,目录结构是[书籍]-[章节]-[题目|答案]-[*.jpg],后台有个异步处理的服务,需要强依赖这个目录结构. 书籍解析是单独的pipeline,日志对用户不可见,这里 ...

  4. 轻松解决U盘中病毒,文件变成&period;exe执行文件的问题

    U盘中的文件都变成.exe可执行文件是怎么回事?告诉你,你的U盘中病毒了,那么如何清除呢?小编现在就告诉你几个简单方法,轻松就能搞定U盘中病毒问题. 方法1: (1)首先使用杀毒软件把U盘杀杀毒,除去 ...

  5. Javaweb程序打包或exe执行文件

    java程序的打包与发布 这里主要是讲解一下怎样将 Java程序打包成独立运行的exe程序包,以下这种方法应该是最佳的解决方案了.NetDuke的EXE程序包了是使用这种方案制作的.在操作步骤上还是比 ...

  6. JDBC课程4--使用PreparedStatement进行增删查改--封装进JDBCTools的功能中&semi;模拟SQL注入 &semi; sql的date&lpar;&rpar;传入参数值格式&excl;

    主要内容: /*SQL 的date()需要传入参数值: preparedStatement().setDate(new java.util.Date().getTime()); 熟悉了使用Prepar ...

  7. plist文件无法打包进&period;a静态库中

    问题: 之前一直在做静态库的编写与维护,也一直知道静态库的图片资源是没办法打进.a中的.可是突然有个想法.由于有非常多參数的配置是在一个plist文件里的.尽管也知道这是一个plist文件,可是想想和 ...

  8. 如何把scratch转成一个swf文件或者exe执行文件

    scratch作为一款启蒙用的积木式编程软件,非常受人欢迎,但是,现在有一个问题就是,无法将之转变成一个可执行文件,以便和周边的人们分享. 我个人认为把scratch转变为一个可执行的exe文件,并不 ...

  9. web端调起Windows系统应用程序(exe执行文件),全面兼容所有浏览器

    1. 首先,你要有一个exe可执行文件2. 创建注册表创建注册表有两种方式(以“MyApp.exe”为例): 方式一:可视化编辑Win+R 打开运行,输入 regedit 并回车,进入注册表编辑器新建 ...

随机推荐

  1. &lbrack;转载&rsqb; Android Bander设计与实现 - 设计篇

    本文转载自: http://blog.csdn.net/chenxiancool/article/details/17454593 摘要 Binder是Android系统进程间通信(IPC)方式之一. ...

  2. ant常用命令

    1.ant -version

  3. 互联网金融必须知道:O2O、P2P、MRD、BRD、LBS、PV、UV、KPI、MRD、VP、UED&period;&period;&period;&period;

    进入互联网的朋友们和身为互联网业内人士,你们知道有多少专业术吗?有时候专业术语也是一种逼格.商业需求文档,市场需求文档,产品需求文档,功能详细说明文档,华丽丽的各种文档你知道吗?用户体验,用户界面,用 ...

  4. 浅谈ERP系统实施后如何完善企业内部控制制度建设

    ERP与企业内部控制制度,前者提升企业的管理水平,后者为企业发展保驾护航,两项工作都是企业各项工作的重中之重. ERP是企业资源规划Enterprise Resource Planning的缩写.企业 ...

  5. linux中mail函数不能发送邮件

    没有安装或启动 sendmail 组件 解决办法 我是新手,命令不熟,所以写的很详细,老鸟勿喷哦 1.重新安装 sendmail 组件,我用的是 CentOS ,使用下面的命令安装 代码如下 复制代码 ...

  6. 【转】Android开发20——单个监听器监听多个按钮点击事件

    原文网址:http://woshixy.blog.51cto.com/5637578/1093936 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律 ...

  7. &lbrack;HDOJ 5155&rsqb; Harry And Magic Box

    题目链接:HDOJ - 5155 题目大意 有一个 n * m 的棋盘,已知每行每列都至少有一个棋子,求可能有多少种不同的棋子分布情况.答案对一个大素数取模. 题目分析 算法1: 使用容斥原理与递推. ...

  8. 关于学习方法的借鉴和有关C语言学习的调查

    专长的高超技能获取的成功经验 在游戏方面,我相对于大多数人来说可能更为出色.首先是我投入了大量的时间进行游戏:其次,我几乎每天都会看一会教学视频来模仿:最后应该还是跟个人的天赋有点关系. 如果把这个类 ...

  9. AngularJS创建新指令directive参数说明

    var myapp = angular.module('myapp', []); myapp.directive('worldname', function() { return { template ...

  10. rem的在vue项目中使用配置,,浏览器的兼容性之Mate标签

    在vue中配置rem 位置:在APP.vue的script中,在export default之外 (()=>{ let winW = document.documentElement.clien ...