zoukankan      html  css  js  c++  java
  • 将DLL文件直接封装进exe执行文件中(C#)

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


    具体解决方法如下:

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

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

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

            /// <summary>
            /// 将dll文件拷贝到系统目录
            /// </summary>
            private void copyDLL()
            {
               
                string finddiskPath = @"C:WindowsSystem32FindDisk.dll";//设置释放路径  
    
                string msvcrdllPath = @"C:WindowsSystem32msvcr100d.dll";//设置释放路径  
    
                //创建dll文件
                if (!File.Exists(finddiskPath))
                {
                    byte[] finddiskDll = Resources.FindDisk;//获取嵌入dll文件的字节数组  
    
                    using (FileStream fs = new FileStream(finddiskPath, FileMode.Create))
                    {
                        fs.Write(finddiskDll, 0, finddiskDll.Length);
                    }
                }
    
                //创建dll文件
                if (!File.Exists(msvcrdllPath))
                {
                    byte[] msvcrDll = Resources.msvcr100d;
    
                    using (FileStream fs = new FileStream(msvcrdllPath, FileMode.Create))
                    {
                        fs.Write(msvcrDll, 0, msvcrDll.Length);
                    }
                }
            }        

    至此,将DLL文件封装进exe执行程序中的主要操作完成,具体如何调用,可参看:Java(使用JNA)调用DLL库与C#调用DLL库的对比


    by Shawn Chen,2017.7.4日,晚。

  • 相关阅读:
    leetcode53. Maximum Subarray(动态规划)
    MinGW中没有gdb.exe解决办法
    POJ
    POJ 3614 (贪心)
    bzoj 1057 (悬线法求最大子矩阵)
    bzoj1 218 激光炸弹(二位前缀和)
    POJ 2299(归并求逆序对)
    HDU 1394(归并求逆序对)
    POJ1523 Targin求关节点
    HDU6299 贪心
  • 原文地址:https://www.cnblogs.com/developer_chan/p/7107636.html
Copyright © 2011-2022 走看看