How to Deploy my Visual C++ Applications, Part 1

前言

寫程式的人常常會寫了一些應用程式或小工具後,想把它拿到另外一台電腦上測試或是分享給親朋好友,此時若是對方的電腦沒有安裝 Visual Studio,往往會遇到一個問題:對方無法執行我們的程式!

中文版錯誤訊息:ScreenHunter_02 Apr. 25 20.41

無法啟動這個應用程式,因為應用程式的設定不正確。重新安裝應用程式應該可以修復這個問題。

英文版錯誤訊息:(我沒有英文版 Windows ,只好上網偷

ScreenHunter_01 Apr. 25 22.11

This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem.

每當我遇到這種情況的時候,我都會想起研究所的學弟 DNA !當然不是想他這個人,是想起他說的話:

What The Fuck! (WTF)

這當然有一些解決方式:

  1. static link、
  2. 找出所有的 dependency ,然後包一包丟過去、
  3. 做個 release build ,然後找 MS 出的轉散發套件(redistributable package)請對方安裝、
  4. 做個安裝程式,把所有東西包一包!

解決方式

這裡就介紹最簡單的解決方式:copy!Visual C++ 的散佈套件放在:

安裝目錄\VC\redist

若是散佈 release 版本,就在這資料夾下根據平台選擇,若是 debug 版本,就選擇 Debug_NonRedist 這個子目錄,進去後一樣根據平台選擇下一個目錄。

image

不論是 release 版或是 debug 版,目錄都會根據函式庫類型分類好,不過 debug 似乎比 release 少了些東西:

  • Microsoft.VC80.ATL
  • Microsoft.VC80.MFCLOC

不確定是不是因為 debug 版沒有上面兩者或是包含在 DebugMFC 裡頭了

ScreenHunter_03 Apr. 25 22.27 Microsoft Visual Studio 8\VC\redist\Debug_NonRedist\x86 的 layout,給 debug build 用

ScreenHunter_04 Apr. 25 22.27Microsoft Visual Studio 8\VC\redist\x86 的 layout,給 release build 用

剩下要做的就是把跟你程式相關的函式庫一同 copy 給對方就可以了,不過這只解決了與 Visual C++ 相關的相依性,其他的程式用到的函式庫,就得靠自己尋找一下。

基於好奇,再往 CRT 的資料夾裡頭看一下,那麼你會發現裡頭有四個檔案:(節錄自C Run-Time Library (CRT)

  1. Microsoft.VC80.DebugCRT.manifest
    Side-by-side assembly 不可或缺的一環,是微軟在 .Net 提出的架構,用來管理程式、元件的相依性。竟然說是不可或缺了,記得一定要 copy 這個檔案過去。
  2. msvcr80d.dll
    Multithreaded, dynamic link (import library for MSVCR80.DLL). Be aware that if you use the Standard C++ Library, your program will need MSVCP80.DLL to run.
  3. msvcp80d.dll
    Standard C++ Library
  4. msvcm80d.dll
    C Runtime import library. Used for mixed managed/native code. 如果程式沒用到 managed code,這個就不需要!

image

 

Reference

  1. MSDN: How to: Deploy using XCopy
  2. This application has failed to start because the application configuration is incorrect
  3. MSDN: C Run-Time Library (CRT)

又是廣告,公司徵才!

中午接到以前打工認識的朋友的電話,他現在在一間新公司上班,想在台灣成立軟體團隊,產品是 DVR 相關的監控產品,工作地點在台北中和或是大陸廣州中山,工作會用到 ARM, Linux, C/C++,職缺是軟韌體工程師,有熟悉下面的有加分:

  1. 對 Video Codec (H.264)熟悉
  2. Video streaming
  3. TCP/UDP/RTP/RTSP protocol
  4. Linux kernel, driver
  5. Windows 遠端監控
  6. Mobile 遠端瀏覽程式

有興趣的朋友,可以跟我說唷!

Qt 4.5 Released

自從 Trolltech 被 Nokia 買了之後,網頁風格就變了,感覺好像比以前好了!不過最重要的是, Qt 4.5 改成以 LGPL 作為 Free 版本的授權,Yes!不過這次的編譯好像變麻煩了,試了好幾天 : ( 原來前陣子,這麼 down ,Qt 也要負責啦!)下面是嘗試過後,可用的編譯選項:

  1. configure –platform win32-msvc –debug-and-release –no-qt3support –no-webkit
    • -platfrom win32-msvc: 這似乎是這個版本一定要加的選項,我有試過用 %QMAKESPEC% 這個環境變數,但似乎沒用,一定得加這個選項。
    • -debug-and-release: 嗚嗚,是人總要 debug 吧,預設的編譯是不產生 debug 的,記得加上!
    • -no-qt3support: opensource 最常被訐詨的就是不向下相容, Qt 佛心來的!
    • -no-webkit: 論壇上很多人說他 build webkit 就會 build failed ,如果沒有要用到這個功能,可以略掉!不過我自己測試的結果是 OK!
  2. nmake

編譯環境:

  • Windows XP
  • Visual Studio 2005 SP1

Enjoy it!

PreCode Snippet 4.0.2 Released

在之前的文章提到的 PreCode 出新版了,已經支援 SyntaxHighlighter 2.0 的語法。不必像之前文章那樣進到原始碼模式修改 tag 。

喜形於色

小學的時候大家都寫過國語習題的照樣造句,沒寫過的表示我們是不同年代的人了…

今天我也要來照樣造句,

第一題:喜形於色。
例句:小明的論文上了,所以喜形於色。
Keiko:Royce 今天喜形於色地丟著 msn 訊息!早上老闆看了都大叫:Royce 你在笑唷!晚上 Aawen 同事見了也大叫:Royce 你怎麼了,怎麼一直笑!

第二題是成語造句,要先查成語字典,知道成語的意思後,再造句!
題目:春風得意。
解釋:舊時稱登進士第後的志得意滿為「春風得意」。後用以形容人做事順利,志得意滿的神情。唐˙孟郊˙登科後詩:「春風得意馬蹄疾,一日看盡長安花。」元˙喬吉˙金錢記˙第四折:「他見我春風得意長安道,因此上迎頭兒將女婿招。」
Keiko:今天台北冷冷的,飄著小雨,可是身邊暖暖地,原來旁邊站著是 Royce ,看他春風得意的,啊,原來台北沒有黃鶯,有的是路大師!原來人間四月天,春都到了小路身旁,怪不得外頭冷颼颼的,惟有這處暖!哇,春風滿面樂醄醄,一聲長笑海山高 : )

第三題是自由發揮
題目:百年好合、永結同心
Keiko:老師,這題我要留到 5/17 ,口以嗎?
老師:可以啊,科科!

當兵

今天比平常早了一點到公司,就跟 Arther 老大閒聊了一下,聊到了成功嶺大專兵可能要又恢復了!夭壽啊,當兵耶,一個可以讓平常剛毅木訥、口才遲鈍的男人瞬間長舌的話題,就像瑪莉兄弟吃到無敵星星,講話、回憶技能都滿了!果不其然,坐我後頭的兩位 J 先生馬上就打開話夾子了,耶,Architect 的穩重怎麼都不見了!一個是步校、一個是帶預官的,還好不用一梯退三步,不然我就要站去 101 了!

不過話題的結束台詞跟我想的一模一樣:
Jason 1:現在想想,當兵那段時間還蠻值得回憶的!
Jason 2:當兵是件可以回憶卻不想在經歷的事!
Keiko:Yes, bingo! (心理話)

忘了自己哪時候退伍…

啊,還有 866 天,這就是版面新工具的由來!

MiniFilter InstanceSetupCallback is not called?

一般來說,MiniFilter 的 InstanceSetupCallback 會在 filter manager 把 minifilter attache 到 volume 後呼叫。如果沒有的話,可以檢查一下 minifilter 的 INF 是否把 instance fla...