最新文章

[轉貼][教學]使用Visual Studio 2005製作應用程式的安裝檔

10月 30, 2008
轉貼自:http://sedc.pixnet.net/blog/post/14882266

寫應用程式時,如果引用了許多週邊的函式庫或dll檔案,在將程式的成品搬移至其他電腦執行時,是不是常發生東漏一個圖檔、西漏一個dll的情況呢?對於使用Visual Studio來寫程式的設計者,可以用它內建的「佈署專案」來製作整個程式的安裝檔,將你專案的程式及所需的檔案包裝在一個msi檔中,如此一來只要設定好佈署專案的內容,就不必擔心每次要帶到其他電腦上執行時會有缺漏了。

以下便配合圖片來介紹如何使用佈署專案,使用的版本是Visual Studio 2005 Service Pack1

我們先拿一個範例專案MyProgram,來當做成品的應用程式,在這裡它是一個以C#寫成的Windows Form應用程式,輸出檔為MyProgram.exe。

在這個專案中,我們參考了.NET的Managed DirectX,如上圖的Microsoft.DirectX、Microsoft.DirectX.Direct3D、 Microsoft.DirectX.Direct3DX三項,另外還參考了一個自己找到的MgdWM4Wrapper,它是一個名為 MgdWM4Wrapper.dll的dll檔案。

接著在最上面的方案(也叫MyProgram)接右鍵,選擇加入->新增專案




選擇左邊的其他專案類型,再選擇右邊的安裝專案,接著在下方的名稱輸入自己要的專案名稱,它也會是最後產生出來的msi檔的預設名稱。

專案建立完成後,會自動開啟出該專案的設定檔案系統的頁面:




這個頁面的介面基本上就跟檔案總管的型式是類似的,左邊是資料夾,右邊是資料夾的內容。在佈署專案的檔案系統中,有三個資料夾的內容要設定,分別是「使用 者的桌面」、「使用者的程式功能表」--分別可以設定要在使用者的桌面和程式集功能表中加入哪些檔案(通常是捷徑),以及「應用程式資料夾」--存放應用 程式所需檔案的地方,通常就是使用者電腦的「C:\Program Files」資料夾。在這裡我們先從「應用程式資料夾」一項開始設定,因為上二項的捷徑會需要對應至它其中的檔案。

在左邊的應用程式資料夾上按右鍵,移到加入之上,會有四類的東西可以選擇:



如果你希望在程式的資料夾中,再多建幾個資料夾以分類檔案,可以選擇加入資料夾。在這裡我們先選擇最重要的專案輸出



在這個視窗中,最上面的專案下拉式列表可以讓你選擇同在一個方案中的專案,以本例而言僅有MyProgram專案。中間的視窗可以讓你選擇該專案中的哪些部份要加入至佈署中,可以配合Ctrl或Shift做複數選取,通常選擇主要輸出即可。 再下面的組態這是選擇該專案是要以什麼樣的建構版本加入至佈署(Debug或Release),預設是作用中,即跟從該專案現在的設定。

按下確定後,我們可以發現除了MyProgram的主要輸出(即MyProgram.exe檔)外,其他額外的參考組件也被加入至應用程式資料夾中了,同時在「方案總管」中,SetupProgram專案的「偵測到的相依性」也列出了該四項組件。



除了專案輸出之外,如果應用程式有其他需要的檔案,也可以用加入->檔案的方式,加入至應用程式資料夾中。為了開發上的方便,最好是讓開發專案的資料夾及檔案配置,能與佈署專案中安排的配置一致,才不會開發時改一套,佈署時又要改一套。

接下來我們設定一下應用程式資料夾的屬性,在「使用者的應用程式」的屬性視窗中,有二項需要注意的屬性:


佈署專案的每個資料夾都會有AlwaysCreate屬性需要設定,它表示「即使該資料夾是空的,是否仍要建立」,預設值為False。通常是不會需要設定成True,但若你的專案有需要事先建立空白的資料夾時,可以把該資料夾的屬性設定為True。另一個屬性是DefaultLocation,它代表了在使用者的電腦中的位置,預設值是 [ProgramFilesFolder] [Manufacturer]\[ProductName] ,我們以常用的軟體Adobe Reader的路徑為例:

C:\Program Files\Adobe\Reader 8.0

[ProgramFilesFolder] -> C:\ProgramFiles
[Manufacturer] -> Adobe
[ProductName] -> Reader 8.0

如果要照這個預設值來安裝應用程式的話,後續的佈署專案屬性設定中可以設定Manufacturer及ProductName的值。


應用程式資料夾的設定完成後,我們就可以來設定要在使用者的程式集和桌面上擺入哪些捷徑。對於每一個在應用程式資料夾中,你想對其設置捷徑的檔案(通常是應用程式的執行檔),在它上面按右鍵,選擇建立xxxx的捷徑,接著將其重新命名為你希望使用者看到的名稱:



命名後,將其拖曳至左方的「使用者的桌面」資料夾。對於「使用者的程式功能表」資料夾也如法炮製(捷徑要重製作一個),不過建議先在「使用者的程式功能表」下建立好公司名稱與程式名稱的資料夾,再將捷徑放進去;否則捷徑便會擺在使用者的程式集中的最外層。



捷徑都設置完畢後,我們便可以來對佈署專案做最後的屬性設定(其實這部份要最先做也可以啦)


這裡比較需要記得設定的屬性有:
Author -> 應用程式的作者
Manufacturer -> 應用程式的開發公司
ProductName -> 應用程式的名稱 如上面所提過,這二個屬性可以決定程式安裝的路徑
RemovePreviousVersions -> 當發現使用者的電腦中有較舊版本的同一應用程式時,是否要先移除舊版本
Title -> 安裝程式的標題
Version -> 指定安裝程式的版本,可以配合RemovePreviousVersions屬性來決定與舊版本程式的配合。

除了屬性視窗中列出的屬性,其實佈署專案還有一個屬性頁面要設定,在方案總管中,於佈署專案的名稱上按右鍵,選擇屬性,會開啟下面這個視窗:



組態同樣可以設定佈署專案是要以Debug還是Release模式建置;輸出檔名稱可以設定msi檔的名稱;套件檔案可以選擇要將應用程式的檔案包含在msi檔、或是另外用一個cab檔包著、或是鬆散的檔案。若選擇前二者,則還可以設定壓縮是要以速度還是大小為優先做考量。最後按下必要條件進入最後的設定頁面:



在這個視窗中,Visual Studio 2005會先幫你挑選好它偵測到的應用程式所需的必要元件,如本例中為.NET Framework 2.0。如果你擔心使用者電腦的Windows Installer可能版本不夠新或是損壞,可以再勾選Windows Installer 2.0或3.1版。最下面的三種選項,是設定安裝程式會在使用者的電腦上如何安裝這些必要元件,最保險的方法是從應用程式的相同位置下載必要條件,這會將這些必要元件的可轉散發安裝檔一起放在安裝程式中,缺點自然是整個安裝程式的大小會變得龐大,優點則是可以確保即使目標電腦沒有網路也能安裝這些必要元件。

最後一步,在方案總管中,於佈署專案的名稱上按右鍵,選擇建置,就會開始產生安裝程式囉!視你所選擇的建置模式而異,可以到佈署專案的輸出資料夾下去看看有哪些檔案,以本例來看,檔案是放在Visual Studio 2005的Projects資料夾中,\
MyProgram\SetupMyProgram\Debug 資料夾下:



不論剛剛的專案屬性選擇為何,都會有一個setup.exe檔案,通常它就是整個安裝程式的起點,會在安裝應用程式前檢查使用者的電腦是否有安裝應用程式的必要元件,如果沒有,則會開始下載並安裝必要元件(以上圖來看,因設定了從應用程式的相同位置下載必要條件, 故會從一同產生的dotnetfix資料夾來安裝)。若不需要考慮必要元件,且當初「套件檔案」是選擇含在安裝檔中,則其實可以只拿msi檔去使用者的電 腦安裝。除了安裝,Windows Installer其實連移除的工作也都幫我們設定好了,使用者之後也可以從控制台中的「新增/移除程式」來移除你的應用程式,實在是相當方便。

有關佈署專案的教學就到這邊,其實還有一些小細節設定可以調整,就讓各位高手們去自己試試啦。

原來都是我們造成的!!

10月 28, 2008
昨晚小鐵哭的很凄厲,鐵媽打電話來公司要我回家帶小鐵去看醫生。
不知是不是最近天氣正在轉涼的關係?
小兒科人超多的啦!
我們排到十點多才輪到。

後來才知道,我們不應該把配方奶給更換!
醫生說每家的奶粉乳糖的比例都不同,小baby很可能無法適應,
就會造成這種情況。

回家後,鐵媽拿出了媬母的 寶貝日誌,比對一下,
終於發現了的確是這個原因!!

原本小鐵的食量已經是 150cc,但自從我們開始加入了另一牌的配方奶後,
就開始出現了腸絞痛的症狀。

隨著加入的比例一直增加,小鐵的食量也跟著下降! 從150降到120,
這兩天更是喝不到100 !!

小鐵也就愈來愈瘦,體重還降到 5.6kg... QQ

而且也注意到,之前去看過一次醫生,有開給我們酵素。
當小鐵的配方奶有加酵素時,他就可以把150喝光光。

哎,回頭一想,真是為了我們的貪小便宜感到丟臉啊....
無辜的小鐵只能承受這樣的結果。
都是我們造成的....orz

現在我們把配方奶全換回來嚕!
雖然貴了點,但能讓小鐵好好地喝才是最重要的~~~~

到藝園堂吃飯

10月 27, 2008
小鐵真的很乖吶~~~
我們到好久沒去的藝園堂吃飯。
它的座位是像沙發一樣,所以我們直接就把小鐵放在座椅上,不用再讓他躺在推車裏。
餐廳裏很吵雜,鐵媽就和他說我們在餐廳吃飯呀~~~
然後小鐵就沉沉的睡去 XD

餐廳裏還有其他的小孩和baby的哭聲,但小鐵還真的都不受影響耶!

和小鐵講電話~~

10月 24, 2008
其實小鐵根本就還不會講話。
不過我們常常會和他進行一些互動,彼此發出一些聲音。
當他聽到我們和他發出類似的聲音時,就會很高興地笑起來喔!

在公司時,鐵媽打電話來,她就叫小鐵和我講話....

我:小鐵、小鐵
小鐵:.......
我:小鐵,按骨啊~~~~
小鐵:.......
小鐵:啊嗚啊~~~

呼,這樣我就很開心了 XD

小鐵進攻中興嶺

10月 19, 2008
原定下午1:30要出發的,結果因為小鐵剛好醒來肚子餓。等我們弄好已經超過兩點囉!
結果小銀的力量不太夠,要爬上中興嶺時就成了路隊長...orz

VS 2005 C++/CLI 的 config 檔~~~

10月 17, 2008
平常我們會將資料庫連線字串等資訊,存放在 web.config 或是 app.config 等組態檔中。

但這次在用 C++/CLI 開發AP時,才發現不管怎麼用,就是無法取得 app.config 中的資料~~~~

原本的 ConfigurationManager 都會取得 null!

後來才知道,原來C++/CLI根本不認識啥 app.config..... = =

所以我們必須在專案的屬性頁中,做 "建置後事件" 的設定,讓 VS2005 幫我們 copy 一個 config 檔到執行目錄下:

















在DB(用到的專案)的屬性頁,選建置事件,再選建置後事件。輸入:

copy app.config "$(TargetPath).config"

之後就可以像之前用C#一樣的方式來取得 config 中的值了!








輸出畫面中,可以看到VS2005進行建置後事件,並copy了那個app.config。

鋼鐵男子

10月 16, 2008



鋼鐵男子
作詞:伍佰 作曲:伍佰

擦去轉身離去之後 不爭氣的淚
燦爛笑容滲雜著汗水
我真的累 妳看不出我的傷悲
景色還是一樣的美
忘記昨日一切 其實還沒有準備
新的明天如何去面對
我需要安慰 讓悲傷的人不流淚
迎向太陽頭也不回
告訴我
像個鋼鐵般的男子
我會藏起我所有的心事
像座堅強的山 能抵擋風和雨
濃霧若散去 抬起頭遙望著天際
明天又是一片翠綠
像個鋼鐵般的男子
我會藏起我所有的心事
將我熱情的心 隨季節而冷卻
沒有盡頭 前方的路途還遙遠
就算感動也無所謂
一切都將成回憶 無法抹滅的過去
會隨著時間 慢慢地模糊的痕跡
就讓它去 或許有一天會想起
生命之中曾經戰勝自己

單槓又進步了!

10月 15, 2008
昨天終於拉到了17下!
可惜敏淞已經不在這邊啦~~~

吐奶...

10月 14, 2008
早上五點起來待命,果然小鐵開始餓了,就把他抱到客廳餵。
原本是不想吵到鐵媽的,但她也是醒來,還先一步把奶泡好了 ^^"

小鐵喝的很快!

但.....

快喝完時就開始吐了!!

大概是我沒有把嗝拍出來吧? 吐的我一身都是啊....orz

結果小鐵一直哭,鐵媽還是爬起來看。

總之我是失敗了.... 重新修業.......冏

花了約一個小時,再補眠至七點十五。

辛苦的鐵媽

10月 13, 2008
鐵媽為了體恤我都要早起上班,所以讓我另外睡一間,不用和她一起爬起來照顧小鐵。
初期我還會跟著小鐵的哭聲一起爬起來幫忙,後來我甚至已經習慣了,甚至是一覺到天亮。

在休假時,我就想說陪小鐵母子兩睡一下吧~~
雖然已有心理準備,但每一兩小時左右就被驚醒一次的感覺真是讓人疲累...orz
連帶著情緒也不好了起來...

第二天早上我真的沒辦法,又補了個眠。
但鐵媽在這段時間還起來餵了一次。

晚上不只是要餵奶啊,有時小鐵是太熱,或是尿布過溼而哭鬧,這些都需要起來處理。
我不禁佩服起自己的太太...
同時也為自己沒有分擔她的工作而感到羞愧。

現在假日陪她們的時間多了,她也覺得蠻開心的。
我想下一步,就是和她share半夜的輪值囉.....

早上起來到房間去,看到母子兩抱著睡,鐵媽蒼白的臉,真是讓我感到心疼啊...

逗小鐵笑

10月 10, 2008
我終於會逗小鐵笑了!他笑的很開心呀。我們也很開心,哈。
下午把小鐵帶回娘家去收驚囉。
兩夫妻也就這樣手牽手去新開的超市買東西。以後要買東西就不用擔心小鐵的問題啦!

晚上意外發現小鐵趴睡時,居然自己爬行!
之前趴睡還不會這樣,他這次是爬歪歪的有50cm以上!
我們不禁想,如果他是轉另一邊的話,不就哉到床下了嗎?!!

小鐵的新枕頭

10月 07, 2008
2008/10/01

真的好可愛呦!!!
 
這個角度就好可愛
 
Copyright © 大鐵與小鐵的煉鋼廠. Designed by OddThemes