原創(chuàng)|其它|編輯:郝浩|2012-10-15 11:03:05.000|閱讀 467 次
概述:如何在安裝過(guò)程中部署DevExpress控件
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
在我的Winform開(kāi)發(fā)框架或者WCF開(kāi)發(fā)框架中,均提供多種界面樣式選擇,其中有一種就是界面效果比較好的DevExpress控件界面樣式,但是我們一般在開(kāi)發(fā)環(huán)境中使用,安裝包的大小都很大,100多M,那么我們?cè)诓渴鸬娇蛻舳藨?yīng)用的時(shí)候,該如何操作呢?我們分析DevExpress的特殊補(bǔ)丁發(fā)現(xiàn),他們是一個(gè)DOS批處理文件,主要是創(chuàng)建相應(yīng)的目錄,然后把DevExpress的三個(gè)特殊文件復(fù)制到對(duì)應(yīng)的目錄中,就可以實(shí)現(xiàn)DevExpress的正常使用了。那個(gè)DOS批處理文件內(nèi)容如下所示。
一般我們部署客戶端應(yīng)用的時(shí)候,都會(huì)制作一個(gè)安裝包,我們只需要自定義安裝操作中正確執(zhí)行這些DOS命令即可。
但是,在實(shí)際安裝過(guò)程中,由于執(zhí)行Register.bat文件的時(shí)候,gacutil.exe會(huì)以System目錄作為起始目錄,那么就會(huì)導(dǎo)致以上操作失敗,找不到對(duì)應(yīng)的目錄,因?yàn)槟J(rèn)System目錄下面沒(méi)有g(shù)acUtil的文件,更沒(méi)有要拷貝的DevExpress.Data.v11.1.dll等三個(gè)dll文件。那么我們應(yīng)該如何操作才能正確執(zhí)行DOS命令,完成順利部署DevExpress的幾個(gè)特殊的dll文件呢?
1、首先我們創(chuàng)建一個(gè)安裝工程,并添加以上的特殊注冊(cè)文件到安裝包中,然后修改Register.bat文件的內(nèi)容,增加一個(gè)路徑變量"{INSTALL_PATH}",該路徑變量會(huì)在安裝的時(shí)候被替換為具體的路徑名稱。修改后的文件如下所示:
set path="{INSTALL_PATH}" gacutil -u "{INSTALL_PATH}\DevExpress.Data.v11.1" mkdir %windir%\assembly\GAC_MSIL\DevExpress.Data.v11.1\11.1.6.0__b88d1754d700e49a copy "{INSTALL_PATH}\DevExpress.Data.v11.1.dll" %windir%\assembly\GAC_MSIL\DevExpress.Data.v11.1\11.1.6.0__b88d1754d700e49a gacutil -u "{INSTALL_PATH}\DevExpress.Utils.v11.1" mkdir %windir%\assembly\GAC_MSIL\DevExpress.Utils.v11.1\11.1.6.0__b88d1754d700e49a copy "{INSTALL_PATH}\DevExpress.Utils.v11.1.dll" %windir%\assembly\GAC_MSIL\DevExpress.Utils.v11.1\11.1.6.0__b88d1754d700e49a gacutil -u "{INSTALL_PATH}\DevExpress.CodeRush.Common" mkdir %windir%\assembly\GAC_MSIL\DevExpress.CodeRush.Common\11.1.6.0__35c9f04b7764aa3d copy "{INSTALL_PATH}\DevExpress.CodeRush.Common.dll" %windir%\assembly\GAC_MSIL\DevExpress.CodeRush.Common\11.1.6.0__35c9f04b7764aa3d REM copy "{INSTALL_PATH}\DevExpress.CodeRush.Common.dll" "C:\Program Files\DevExpress 2011.1\IDETools\System\DXCore\BIN\DevExpress.CodeRush.Common.dll" if "[%ProgramFiles(x86)%]" == "[]" (copy "{INSTALL_PATH}\DevExpress.CodeRush.Common.dll" "%ProgramFiles%\DevExpress 2011.1\IDETools\System\DXCore\BIN\DevExpress.CodeRush.Common.dll") else (copy "{INSTALL_PATH}\DevExpress.CodeRush.Common.dll" "%ProgramFiles(x86)%\DevExpress 2011.1\IDETools\System\DXCore\BIN\DevExpress.CodeRush.Common.dll")
2、創(chuàng)建一個(gè)安裝包后,并增加一個(gè)自定義安裝項(xiàng)目,命名為InstallerAction項(xiàng)目,然后創(chuàng)建一個(gè)“安裝程序類”,如下所示:
項(xiàng)目工程如下:
3、然后我們修改“安裝程序類”的代碼,覆蓋Install函數(shù),主要是用來(lái)替換Register.bat批處理文件的路徑變量"{INSTALL_PATH}",如下代碼所示:
[RunInstaller(true)] public partial class InstallAction : Installer { public InstallAction() { InitializeComponent(); } public override void Install(IDictionary stateSaver) { base.Install(stateSaver); try { string physicalRoot = this.Context.Parameters["targetdir"]; // 安裝物理路徑 try { //由于執(zhí)行Register.bat文件的時(shí)候,gacutil.exe會(huì)以System目錄作為起始目錄, //因此在Bat文件中設(shè)置一個(gè)參數(shù),安裝的時(shí)候替換為具體的目錄 string Register = Path.Combine(physicalRoot, "Register.bat"); ReplaceName(Register, "{INSTALL_PATH}", physicalRoot); } catch { } string registerFile = Path.Combine(physicalRoot, "Register.bat"); RunDos(registerFile, "", false); } catch (Exception ex) { WriteLog(ex.ToString()); } } /// <summary> /// 在運(yùn)行腳本之前把腳本中的指定名稱替換成新的名詞 /// </summary> /// <param name="filePath">腳本文件名</param> /// <param name="oldDBName">原有的名稱</param> /// <param name="newDBName">新的名稱</param> private void ReplaceName(string filePath, string oldName, string newName) { if (newName.CompareTo(oldName) != 0) { string fileText = string.Empty; using (StreamReader streamReader = new StreamReader(filePath, Encoding.Default)) { fileText = streamReader.ReadToEnd(); fileText = fileText.Replace(oldName, newName); } using (StreamWriter streamWriter = new StreamWriter(filePath, false, Encoding.Default)) { streamWriter.Write(fileText); } } } /// <summary> /// 后臺(tái)執(zhí)行DOS文件 /// </summary> /// <param name="fileName">文件名(包含路徑)</param> /// <param name="argument">運(yùn)行參數(shù)</param> /// <param name="hidden">是否隱藏窗口</param> private void RunDos(string fileName, string argument, bool hidden) { Process process = new Process(); process.EnableRaisingEvents = false; process.StartInfo.FileName = string.Format("\"{0}\"", fileName); process.StartInfo.Arguments = argument; if (hidden) { process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; } else { process.StartInfo.WindowStyle = ProcessWindowStyle.Normal; } process.Start(); process.WaitForExit(); }
4、接著在安裝包的自定義安裝視圖中,把剛才自定義安裝項(xiàng)目關(guān)聯(lián)到安裝包中,如下所示。
并修改主輸出來(lái)自InstallAction的屬性項(xiàng)目如下所示
5、編譯運(yùn)行程序,我們發(fā)現(xiàn)DOS運(yùn)行的效果如下所示,說(shuō)明DOS命令正常運(yùn)行,并復(fù)制了文件。
6、運(yùn)行程序,DevExpress界面正常出來(lái),并沒(méi)有彈出額外的窗體,這真是我們需要的,示例界面如下所示。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:博客園