將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:\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, 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日,晚。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM