有些程序運行的時候,可能調用外部的dll,用户使用時可能會不小心丟失這些dll,導致程序無法正常運行,因此可以考慮將這些dll嵌入到資源中,啓動時自動釋放。對於託管的dll,我們可以用打包軟件合成一個exe(例如利用Imerge),但是對於一些用C++等寫的非託管dll,就比較麻煩。在這種情況下,大家可以考慮本文介紹的方法。
1、將需要用到的dll文件嵌入資源文件中。
(1)將需要用到的dll文件拷貝到工程中;
(2)修改“生成操作”為“嵌入的資源”;
這樣就完成了dll文件嵌入資源的過程。
2、編寫自動釋放的過程
void ReleaseDLL()
{
byte[] byDll = global::命名空間.Properties.Resources.test;//獲取嵌入dll文件的字節數組
string strPath = Application.StartupPath + @"\test.dll";//設置釋放路徑
//創建dll文件(覆蓋模式)
using (FileStream fs = new FileStream(strPath, FileMode.Create))
{
fs.Write(byDll, 0, byDll.Length);
}
}
在程序啓動時,首先調用上面的函數完成dll文件的釋放,然後程序就能夠正常運行了。這種做法只是筆者在實際項目中有時採用的一種方式,相信對大家也有一定的參考價值。