原創|其它|編輯:郝浩|2012-10-15 11:03:05.000|閱讀 467 次
概述:如何在安裝過程中部署DevExpress控件
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
在我的Winform開發框架或者WCF開發框架中,均提供多種界面樣式選擇,其中有一種就是界面效果比較好的DevExpress控件界面樣式,但是我們一般在開發環境中使用,安裝包的大小都很大,100多M,那么我們在部署到客戶端應用的時候,該如何操作呢?我們分析DevExpress的特殊補丁發現,他們是一個DOS批處理文件,主要是創建相應的目錄,然后把DevExpress的三個特殊文件復制到對應的目錄中,就可以實現DevExpress的正常使用了。那個DOS批處理文件內容如下所示。
一般我們部署客戶端應用的時候,都會制作一個安裝包,我們只需要自定義安裝操作中正確執行這些DOS命令即可。
但是,在實際安裝過程中,由于執行Register.bat文件的時候,gacutil.exe會以System目錄作為起始目錄,那么就會導致以上操作失敗,找不到對應的目錄,因為默認System目錄下面沒有gacUtil的文件,更沒有要拷貝的DevExpress.Data.v11.1.dll等三個dll文件。那么我們應該如何操作才能正確執行DOS命令,完成順利部署DevExpress的幾個特殊的dll文件呢?
1、首先我們創建一個安裝工程,并添加以上的特殊注冊文件到安裝包中,然后修改Register.bat文件的內容,增加一個路徑變量"{INSTALL_PATH}",該路徑變量會在安裝的時候被替換為具體的路徑名稱。修改后的文件如下所示:
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、創建一個安裝包后,并增加一個自定義安裝項目,命名為InstallerAction項目,然后創建一個“安裝程序類”,如下所示:
項目工程如下:
3、然后我們修改“安裝程序類”的代碼,覆蓋Install函數,主要是用來替換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 { //由于執行Register.bat文件的時候,gacutil.exe會以System目錄作為起始目錄, //因此在Bat文件中設置一個參數,安裝的時候替換為具體的目錄 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> /// 在運行腳本之前把腳本中的指定名稱替換成新的名詞 /// </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> /// 后臺執行DOS文件 /// </summary> /// <param name="fileName">文件名(包含路徑)</param> /// <param name="argument">運行參數</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、接著在安裝包的自定義安裝視圖中,把剛才自定義安裝項目關聯到安裝包中,如下所示。
并修改主輸出來自InstallAction的屬性項目如下所示
5、編譯運行程序,我們發現DOS運行的效果如下所示,說明DOS命令正常運行,并復制了文件。
6、運行程序,DevExpress界面正常出來,并沒有彈出額外的窗體,這真是我們需要的,示例界面如下所示。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:博客園