第一次用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。