问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何在安装过程中部署DevExpress控件

发布网友 发布时间:2022-04-20 09:18

我来回答

1个回答

热心网友 时间:2022-04-27 10:53

我们分析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}",该路径变量会在安装的时候被替换为具体的路径名称。修改后的文件如下所示。@echooffsetpath="{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")echo 'OK'pause2、创建一个安装包后,并增加一个自定义安装项目,命名为InstallerAction项目,然后创建一个“安装程序类”,如下所示项目工程如下: 3)然后我们修改“安装程序类”的代码,覆盖Install函数,主要是用来替换Register.bat批处理文件的路径变量"{INSTALL_PATH}",如下代码所示 [RunInstaller(true)]
publicpartialclass InstallAction : Installer{public InstallAction(){InitializeComponent();}publicoverridevoid 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>privatevoid 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>privatevoid 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();
}4、接着在安装包的自定义安装视图中,把刚才自定义安装项目关联到安装包中,如下所示。并修改主输出来自InstallAction的属性项目如下所示5、编译运行程序,我们发现DOS运行的效果如下所示,说明DOS命令正常运行,并复制了文件。6、运行程序,DevExpress界面正常出来,并没有弹出额外的窗体,这真是我们需要的,示例界面如下所示。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
黄山门户网主要栏目 壹家居品牌简介 湖南乐享生活家居有限公司一站式毛坯房解决方案 服务器出租 电脑上的时间日期不同步怎么办 台式电脑时间不同步怎么解决? 关于清明节的小学作文400字 微信怎么查询自己名下的微信 如何查看微信实名认证了几个账号 轿车120时速撞击力有多大? 如何破解 devexpress 微软 wpf 与 devexpress 哪个 好 如何使用DevExpress开发用户控件 请教devexpress的winform界面开发基本步骤 法院判三年缓五年是什么意思? 三什么五什么,不什么不什么,如什么如什么,风雨... 像三年五载样子的词语(年和载点了点,不知道是什么... 三年五载雨分离是什么意思? 三年五载这个成语是什么意思? 三年五载是什么意思 三年五载的载是什么意思? 三年五载是什么意? 与“三年五载”类似的成语有哪些? 父母去世后,三年五改是什么意思? 三年五载的意思是什么 三什么五什么 三年五载的意思是什么? 三年五什么四字成语 三年五载的意思是什么? 三年五什么?成语,这个字是什么意思? DevExpress和DXperience的区别 DevExpress安装问题 DEVEXPRESS怎么安 DevExpress 控件的优点和缺点以及公司的发展前景? devexpress大概多少钱 DevExpress仿Metro UI? devexpress详细安装教程 如何编译devexpress 如何使DevExpress控件的窗体皮肤焕然一新 DevExpress如何实现通用表格打印 怎么样在vs中导入devexpress 控件 devexpress 8.2 怎么用 汽车车身电气包括哪些? 汽车电气系统有哪些组成? 汽车电器有哪些? 汽车电路的各种故障及排查? 汽车用电是直流电还是交流电?电压多少? 什么是汽车电路板维修 汽车电板烧了是不是车就报废了 新能源汽车在家充电每当插上电板汽车的仪表上出现...