C# winform 用Developer Express 开发的软件 在别人电脑上无法打开

         第一次用Developer Express插件开发软件, 就被吃了一个闭门羹。 开发出来的winform安装部属打包后。软件在目标计算机上无法打开,双击后只是闪动一下, 就没有反应了。这里要提一下目标计算机上以经安装了(.net framework 3.5)一直折腾了三天,好是崩溃,网上这方面的相关资料又太少了。不过偶然间看到还是有人也有同样的问题。所了这些相关的论坛,才知道原来是因为dev控件注册问题。

所以写这下贴,以方便后来的朋友不走弯路。当然如果还有更好的方法还希望可以赐教。

下面我先说下我用的环境:Developer Express_11.1.6, vs2008, c# winform开发

软件在开发的电脑上安装部署一切正常, 是因为Developer Express所调用的程序集以经加入到GAC。C:\Windows\assembly这个文件夹下可以看到。 在目标计算机上,因为没有下图这三个dll程序集。知道这个道理后,好吧把本机电脑上如果注册的同样到目标计算机上去注册下。

我的电脑上是用这个register.bat DOS批处理,

内容主要就是把破解的Developer Express_11.1.6 的dll加入到全局程序集缓存。

内容如下

@echo off

gacutil -u DevExpress.Data.v11.1
mkdir %windir%\assembly\GAC_MSIL\DevExpress.Data.v11.1\11.1.6.0__b88d1754d700e49a
copy DevExpress.Data.v11.1.dll %windir%\assembly\GAC_MSIL\DevExpress.Data.v11.1\11.1.6.0__b88d1754d700e49a

gacutil -u DevExpress.Utils.v11.1
mkdir %windir%\assembly\GAC_MSIL\DevExpress.Utils.v11.1\11.1.6.0__b88d1754d700e49a
copy DevExpress.Utils.v11.1.dll %windir%\assembly\GAC_MSIL\DevExpress.Utils.v11.1\11.1.6.0__b88d1754d700e49a

gacutil -u DevExpress.CodeRush.Common
mkdir %windir%\assembly\GAC_MSIL\DevExpress.CodeRush.Common\11.1.6.0__35c9f04b7764aa3d
copy DevExpress.CodeRush.Common.dll %windir%\assembly\GAC_MSIL\DevExpress.CodeRush.Common\11.1.6.0__35c9f04b7764aa3d
REM copy DevExpress.CodeRush.Common.dll "C:\Program Files\DevExpress 2011.1\IDETools\System\DXCore\BIN\DevExpress.CodeRush.Common.dll"
if "[%ProgramFiles(x86)%]" == "[]" (copy DevExpress.CodeRush.Common.dll "%ProgramFiles%\DevExpress 2011.1\IDETools\System\DXCore\BIN\DevExpress.CodeRush.Common.dll") else (copy DevExpress.CodeRush.Common.dll "%ProgramFiles(x86)%\DevExpress 2011.1\IDETools\System\DXCore\BIN\DevExpress.CodeRush.Common.dll")


echo 'OK'
pause

gacutil的用法这里就不说了, 网上很多资料讲的很详细,这里主要说我我是如何让目标计算机在安装部署后,在全局程序集内找到供调用的程序集。

我先把

把这上图这几个

文件添加到安装部署里

创建一个文件夹“注册”把这6个文件添加进去,如下图。

上面的批处理创建一个快捷方式到

的文件夹里,这里我重命名为“激活”。

这是方便安装好后进行注册的。

然后就可以进行打包发布。

如果目标计算机上没有.net framework 3.5在打包的时候记得一起打包。如下图:

好拉,开始发布。

 

好了最后在目标计算机上安装,安装完成后在“开始 –> 程序 ->软件->激活”运行一次。

好拉,再去点下软件, 看看是不是以经可以用了。

 

嘿嘿,最后 我还是感觉这总方法不是很好,要手动点下才行。

 

后来我又对全局程序集进行了一定的了解。总结出来方法2。

方法2:

 这里还是要提到上文中的dos批处理,它的主要内容就是把dll引入到全局程序集中,这们多个软件在运行的时候就可以共同调用这个dll。而我在做开发的时候就是软件就以经被指向这个全局程序集缓存内的dev控件dll。当然在发布以后目标计算机上因为没有dev的dll文件,也就无法打开。 所以在做开发的时候只要不去引用全局程序集内的dll就可以解决这个问题。(这里我要感谢一楼的前辈,这是他提出的方案)

好了我下面说一下方法:

先找到dev控制引用的文件路径C:\Program Files\DevExpress 2011.1\Components\Sources\DevExpress.DLL(我是默认安装)

把这个文件复制到项目文件里,取名为"dll库文件"

然后在“解决方案”项目点属性->引用 如下图:

 

把"dll库文件"文件夹添加到里面。

好了点F6编译一下, 再看一下引用中的属性,dev控制引用是不是以经被指向了这个文件夹。

原部属里的dll(程序集)还是指向原先的路径。好了,按下面的方法就可以解决。

好了把原部署里的 项目主输出 删除,这样他所有的引用也都跟着消失了。 再把项目主输出添加进去。看一下自己加载的程序集是不是指向了"dll库文件"。

好了,到这里以经差不多了。

最后发布吧~

在没有dev控制的 目标电脑上运行。

 

我在目标计算机上测试, 这样确实可以运行了。 不过又会弹出一个对话框 如下图:

这是因为没有引用 破解的dll(程序集)造成的。

我就把破解的dll复制到"dll库文件"从新执行方法2,可是在目标计算机上确又无法打开。  也不知道有什么更好的解决办法。

我想如果不介意弹出这个对话框可以采用方法2。

posted @ 2012-03-22 23:27  Hiker天下  阅读(11395)  评论(10编辑  收藏  举报