天天看點

DotNet4應用程式打包工具(把DotNet4安裝程式打包進你的應用程式;WINAPI開發,無dotNet環境也可順利執行)【一】整體思路

先說廢話 因為我承諾第五篇就公布源碼了,但是與第五篇相關的代碼我還沒有完成, 現在又花了一個周末的時間來寫這篇文章 原諒我吧~ (如果你覺得這篇文章更有吸引力的話~那另當别論)

索引:

<a href="http://www.cnblogs.com/liulun/archive/2011/12/22/2298533.html" target="_blank">DotNet4應用程式打包工具-&gt;更新版【三】宿主程式分析+全部源碼下載下傳</a>

<a href="http://www.cnblogs.com/liulun/archive/2011/12/19/2292878.html" target="_blank">DotNet4應用程式打包工具-&gt;更新版【二】安裝工具分析</a>

<a href="http://www.cnblogs.com/liulun/archive/2011/12/12/2284360.html" target="_blank">DotNet4應用程式打包工具(把DotNet4安裝程式打包進你的應用程式;WINAPI開發,無dotNet環境也可順利執行)【一】整體思路</a>

好了~言歸正傳!

先來張圖檔!

DotNet4應用程式打包工具(把DotNet4安裝程式打包進你的應用程式;WINAPI開發,無dotNet環境也可順利執行)【一】整體思路

以更新為如下:

DotNet4應用程式打包工具(把DotNet4安裝程式打包進你的應用程式;WINAPI開發,無dotNet環境也可順利執行)【一】整體思路

1:緣起

那篇文章寫的實在是太簡易了~

主要是因為.NET 3.5的包太大,打包到應用程式中去,太怪!是以就沒有深入做這個工作

考慮到現在.Net 4 x86隻有二十幾兆;(x86andx64才四十幾兆)

如果能打包到應用程式中去,就美多了

于是寫了這個工具。

2:分析

别看這個工具小(隻有三個按鈕一個文本框)

其實他裡面包含了三個程式

第一個就是你看到的這個圖檔所展示的應用程式

我們叫他“打包工具”

第二個和第三個程式是作為資源放在“打包工具”裡的

第二個程式是dotNet4的安裝包

第三個程式負責判斷用戶端是否有dotNet環境

我們叫他“宿主程式”

下面我們就分别說說這三個程式的邏輯:

2.1打包工具

選擇好您的應用程式(我們叫他“目标程式”)

點開始打包後

“打包工具”先把“宿主程式”釋放到“目标程式”的相同的目錄下

然後得到“目标程式”的圖示ICON資源

然後把“宿主程式”的圖表ICON資源替換掉

然後把整個“目标程式”當作資源添加到“宿主程式”中

然後“打包工具”把自身的dotNet安裝包資源也添加到“宿主程式”中

至此打包成功

2.2宿主程式

宿主程式的邏輯稍微多一些

在打包成功,把打包後的“宿主程式”分發到客戶電腦上之後

客戶打開宿主程式

先檢查系統資料庫,看客戶環境是否安裝了dotNet4應用程式

如果沒有安裝

釋放dotNet安裝包資源(打包時加入進去的)

執行dotNet安裝包程式,等待安裝程序執行完成

安裝完成後,再次檢查系統資料庫

如果順利通過檢查

就釋放目标程式

然後執行目标程式

等待目标程式程序執行完成

執行完成後,删除釋放的dotNet應用程式和目标程式

然後“宿主程式”退出

3:後記

3.1為什麼不靜默安裝dotNet4

雖然可以做到的

但是

第一dotNet4安裝過程中可能會有很多情況發生

要處理很多邏輯,做起來太複雜,

第二用戶端環境會報毒

3.2為什麼在目标程式執行完成後要删除目标程式

我假定您打包的“目标程式”就是一個安裝包

而且這個安裝包的擴充名是.exe

一個安裝包程式

基本的功能應該有安裝、解除安裝、建立桌面圖表等等

是以我執行了一次您的安裝包~

以後的事情就讓您自己做吧~

3.3我會公布源碼的

雖然我對C和winapi都是一知半解

但我願意公布源碼~

在接下去的這個系列的幾篇文章中會陸續公布源碼

3.4程式可能會有問題

我是在WIN2008的機器上開發的這個程式

在WIN2003的機器上測試了這個程式

開發和測試都是64位環境

現在也深夜了~沒有人幫我測試~

如果有問題,我會盡快搞定的~

3.5先釋出編譯版本

由于已經把DotNet4安裝包編譯到程式裡面去了比較大~

就沒有傳到部落格園伺服器上來

如果您對這個程式感興趣

請點選推薦後在評論裡留下您的郵箱

我會在今天晚上六點之後統一發郵件給大家

注意:截至時間是2011年12月12号晚六點整~

這個時間點之後填寫的郵箱我就不再發送了~

見諒

請大家統一把郵箱中的@符号替換成#号(避免郵箱位址被采集)

繼續閱讀