散分,推荐一款制作单独EXE的软件,使用VB、.NET搞绿色软件的可以参考

threenewbee 2009-10-10 07:20:02
工具介紹:Thinstall
作者:蔡學鏞


2004 年 9 月

軟體開發完畢,需要開始考慮到部署 (deployment) 的問題。部署往往不是一件簡單的事,有一些問題需要解決。早期,Java 尚未普及時,許多 Java 程式員都會面臨一個困擾,那就是:用 Java 開發出來的軟體,不保證可以在其他人的 PC 上執行,因為別人可能沒有安裝 JRE (Java Runtime Environment,Java 執行環境)。即使有安裝 JRE,JRE 的版本可能也不對。即使是現在,這個問題依然存在。

同樣地,.NET現在也遇到這個問題。目前,只有 Windows Server 2003 預先安裝好 .NET Framework,其他的作業系統都沒有預先安裝 .NET Framework。這會造成有些公司在評估開發工具時,會捨棄 .NET,而就 MFC,甚至回到 Win32 API,畢竟 MFC 和 Win32 的 DLL 在所有的 Windows 平台上都有。我常覺得這可稱為「舊技術不死,只是凋零」,凋零得還真慢呢!

如果讓安裝程式將 .NET Framework 附在其中,會造成一些問題:安裝 .NET Framework 時需要有足夠的權限,權限不夠則無法安裝。例如,Guest 帳戶無法存取 Registry,安裝 .NET Framework 需要存取 Registry。另外,體積也是一個大問題,.NET Framework 下載超過 20MB(安裝後超過100MB)。

幸好,有一些軟體廠商提供工具可以解決此問題,Thinstall 正是一個這樣的工具。在 .NET Framework 尚未普及的今日,這樣的工具更顯得重要。Thinstall 是 Jitit 公司的產品,你可以在 http://thinstall.com/ 找到它的資料,以及下載 30 天試用版。

顧名思義, Thinstall 是 Thin-Install 的意思,讓軟體免於安裝的困擾。利用 Thinstall ,可以將一個軟體的許多檔案包裝 (package) 成一個 EXE 檔,不需要解壓縮,不需要安裝 (install),就可以直接執行。利用 Thinstall ,你可以將 .NET Framework 和你的程式,以及相關的檔案都包裝在一起,變成一個自給自足的 EXE 檔。

除了將 .NET Framework 包裝進 EXE 之外,Thinstall 還有一些額外的好處,包括了:

可以將 3rd Party 程式庫,以及相關的檔案,都包裝在一個 EXE 檔中,讓程式執行時,不會有檔案遺失的狀況。
Thinstall 使用的壓縮技術,壓縮比例可以比 ZIP 或 RAR 更高。
Thinstall 並不會將整個 .NET Framework 都包裝進 EXE,只把有使用到的部分包裝進 EXE,加上使用壓縮技術,這使得包裝出來的程式體積不大,一般都在 3~8MB 之間。
Thinstall 有使用加密技術,可以保障資料檔案不會輕易地被他人窺視與竄改,程式也更不容易被反編譯和反組譯。
Thinstall 整合安裝程式的功能,可以建立開始選單 (Start Menu) 與桌面捷徑 (Desktop Shortcut)。
Thinstall 可以讓軟體變成 30 天試用版 (Trial)。
使用 Thinstall 也不是全然沒有缺點,最明顯的缺點是,執行效率會或多或少受到影響,且浪費更多記憶體。我的經驗是,大多數的程式感覺不出效率變差,但某些用到特殊的技巧的程式,其效率的確變差了。另外,使用 Thinstall 時,必須考慮到法律的問題。因為 Thinstall 將許多程式庫都包裝進來,這些別人開發的程式庫 (包括.NET Framework) 是否可以隨著你的 EXE 而散播,Thinstall 的使用者需要好好研究其授權方式。

Thinstall 的使用方式非常容易,你可以在 Thinstall 的網站上看到用法介紹。較值得注意的是,Jitit 公司不希望 Thinstall 產品被不合法地盜用,所以對於 Thinstall 的保護相當嚴格。使用 Thinstall 時,電腦必須能上網,因為 Thinstall 需要連線到 License Server,來得知你是否為合法的用戶 (或試用戶),否則將不能執行 Thinstall。你也可以向他們購買 USB 的 Key,就可以不用上網,離線使用 Thinstall。

Thinstall 可以利用PE檔案格式的 Import Table,以及利用 .NET Metadata Table 內記錄的資訊,來得知此程式使用了哪些 DLL,Thinstall 會自動加入這些 DLL,甚至連間接使用到的 DLL (也就是 DLL 所使用的 DLL),也會被自動加入。但是,Thinstall 無法得知程式中利用 Win32 的 LoadLibrary() 或 .NET的Assembly.Load() 等API所動態載入的 DLL 有哪些,所以使用者必須自行將這些 DLL 加入到 Thinstall 中,以免包裝出來的 EXE 檔殘缺不全。

Thinstall 採用的機制相當巧妙,利用一個 Virtual OS 將程式和 OS 隔開來。如果你的程式是 .NET 程式,則在你的程式和 Virtual OS 之間,還有一個 .NET CLR,如圖 1 所示:


圖 1
如果你利用Thinstall來包裝.NET程式,那麼Thinstall所產生出來的EXE檔內,除了包含你的原始EXE檔之外,還有.NET Framework,以及Thinstall Virtual OS,如圖2所示。


圖 2
Thinstall Virtual OS 重新改寫了 300+ 個 Win 32 API,這些 API 大都是和檔案、Registry、Process 等有關。Virtual OS 內有自己的 Virtual File System 和 Virtual Registry。這些被改寫的 API,將 Virtual File System 和 Real File System 整合起來,成為一個新的 File System;將 Virtual Registry 和 Real Registry 整合起來,變成一個新的 Registry。

當系統載入此 Thinstall 包裝出來的 EXE 時,Virtual OS 會先被載入,Virtual OS 會接著載入原始的 EXE (以及.NET Framework),然後解壓縮與解密、並該更改此 EXE(以及.NET Framework) 所使用到的這 300+ API,使其呼叫到 Virtual OS 的版本,而不是 Real OS 的版本。最後把執行權交給此 EXE。偷天換日的工作,於是完成!

因為 Thinstall 內部使用這套 Virtual OS 的機制,而不是針對 .NET 來設計一個專屬的機制,所以 Thinstall 除了用來包裝 .NET 程式,也可以用來包裝 Java 程式,甚至 VB,或其他程式。我覺得這是一套很方便的工具,值得您也試試。

地址:http://msdn.microsoft.com/zh-tw/library/dd229231.aspx
...全文
1280 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanghi 2012-04-30
  • 打赏
  • 举报
回复
制作安装的好东西,必须收藏
卓一航啊 2011-05-21
  • 打赏
  • 举报
回复
好东西
心灵彩虹 2010-12-31
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 aimeast 的回复:]
还是翻译成简体中文吧

工具介绍:Thinstall
作者:蔡学镛


2004 年 9 月

软体开发完毕,需要开始考虑到部署 (deployment) 的问题。部署往往不是一件简单的事,有一些问题需要解决。早期,Java 尚未普及时,许多 Java 程式员都会面临一个困扰,那就是:用 Java 开发出来的软体,不保证可以在其他人的 PC 上执行,因为别人可能没有安装 JR……
[/Quote]本来就是中国字,哎,没有简化前老祖宗都用的这样的字啊。
superNANA_MUMU 2010-08-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 aimeast 的回复:]
还是翻译成简体中文吧

工具介绍:Thinstall
作者:蔡学镛


2004 年 9 月

软体开发完毕,需要开始考虑到部署 (deployment) 的问题。部署往往不是一件简单的事,有一些问题需要解决。早期,Java 尚未普及时,许多 Java 程式员都会面临一个困扰,那就是:用 Java 开发出来的软体,不保证可以在其他人的 PC 上执行,因为别人可能没有安装 JR……
[/Quote]

翻译的好
superNANA_MUMU 2010-08-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 chenjl1031 的回复:]
up
[/Quote]

翻译的好
darkzack3 2010-05-17
  • 打赏
  • 举报
回复
好东西啊,谢谢楼主
wangxixiang 2010-05-15
  • 打赏
  • 举报
回复
定一下
ntccn 2009-11-02
  • 打赏
  • 举报
回复
下载来用下,就是有试用期.
dylike 2009-10-11
  • 打赏
  • 举报
回复
WIN7即将流行,库问题很快消失.
Scoful 2009-10-10
  • 打赏
  • 举报
回复
这是个办法
aimeast 2009-10-10
  • 打赏
  • 举报
回复
还是翻译成简体中文吧

工具介绍:Thinstall
作者:蔡学镛


2004 年 9 月

软体开发完毕,需要开始考虑到部署 (deployment) 的问题。部署往往不是一件简单的事,有一些问题需要解决。早期,Java 尚未普及时,许多 Java 程式员都会面临一个困扰,那就是:用 Java 开发出来的软体,不保证可以在其他人的 PC 上执行,因为别人可能没有安装 JRE (Java Runtime Environment,Java 执行环境)。即使有安装 JRE,JRE 的版本可能也不对。即使是现在,这个问题依然存在。

同样地,.NET现在也遇到这个问题。目前,只有 Windows Server 2003 预先安装好 .NET Framework,其他的作业系统都没有预先安装 .NET Framework。这会造成有些公司在评估开发工具时,会舍弃 .NET,而就 MFC,甚至回到 Win32 API,毕竟 MFC 和 Win32 的 DLL 在所有的 Windows 平台上都有。我常觉得这可称为「旧技术不死,只是凋零」,凋零得还真慢呢!

如果让安装程式将 .NET Framework 附在其中,会造成一些问题:安装 .NET Framework 时需要有足够的权限,权限不够则无法安装。例如,Guest 帐户无法存取 Registry,安装 .NET Framework 需要存取 Registry。另外,体积也是一个大问题,.NET Framework 下载超过 20MB(安装後超过100MB)。

幸好,有一些软体厂商提供工具可以解决此问题,Thinstall 正是一个这样的工具。在 .NET Framework 尚未普及的今日,这样的工具更显得重要。Thinstall 是 Jitit 公司的产品,你可以在 http://thinstall.com/ 找到它的资料,以及下载 30 天试用版。

顾名思义, Thinstall 是 Thin-Install 的意思,让软体免於安装的困扰。利用 Thinstall ,可以将一个软体的许多档案包装 (package) 成一个 EXE 档,不需要解压缩,不需要安装 (install),就可以直接执行。利用 Thinstall ,你可以将 .NET Framework 和你的程式,以及相关的档案都包装在一起,变成一个自给自足的 EXE 档。

除了将 .NET Framework 包装进 EXE 之外,Thinstall 还有一些额外的好处,包括了:

可以将 3rd Party 程式库,以及相关的档案,都包装在一个 EXE 档中,让程式执行时,不会有档案遗失的状况。
Thinstall 使用的压缩技术,压缩比例可以比 ZIP 或 RAR 更高。
Thinstall 并不会将整个 .NET Framework 都包装进 EXE,只把有使用到的部分包装进 EXE,加上使用压缩技术,这使得包装出来的程式体积不大,一般都在 3~8MB 之间。
Thinstall 有使用加密技术,可以保障资料档案不会轻易地被他人窥视与窜改,程式也更不容易被反编译和反组译。
Thinstall 整合安装程式的功能,可以建立开始选单 (Start Menu) 与桌面捷径 (Desktop Shortcut)。
Thinstall 可以让软体变成 30 天试用版 (Trial)。
使用 Thinstall 也不是全然没有缺点,最明显的缺点是,执行效率会或多或少受到影响,且浪费更多记忆体。我的经验是,大多数的程式感觉不出效率变差,但某些用到特殊的技巧的程式,其效率的确变差了。另外,使用 Thinstall 时,必须考虑到法律的问题。因为 Thinstall 将许多程式库都包装进来,这些别人开发的程式库 (包括.NET Framework) 是否可以随着你的 EXE 而散播,Thinstall 的使用者需要好好研究其授权方式。

Thinstall 的使用方式非常容易,你可以在 Thinstall 的网站上看到用法介绍。较值得注意的是,Jitit 公司不希望 Thinstall 产品被不合法地盗用,所以对於 Thinstall 的保护相当严格。使用 Thinstall 时,电脑必须能上网,因为 Thinstall 需要连线到 License Server,来得知你是否为合法的用户 (或试用户),否则将不能执行 Thinstall。你也可以向他们购买 USB 的 Key,就可以不用上网,离线使用 Thinstall。

Thinstall 可以利用PE档案格式的 Import Table,以及利用 .NET Metadata Table 内记录的资讯,来得知此程式使用了哪些 DLL,Thinstall 会自动加入这些 DLL,甚至连间接使用到的 DLL (也就是 DLL 所使用的 DLL),也会被自动加入。但是,Thinstall 无法得知程式中利用 Win32 的 LoadLibrary() 或 .NET的Assembly.Load() 等API所动态载入的 DLL 有哪些,所以使用者必须自行将这些 DLL 加入到 Thinstall 中,以免包装出来的 EXE 档残缺不全。

Thinstall 采用的机制相当巧妙,利用一个 Virtual OS 将程式和 OS 隔开来。如果你的程式是 .NET 程式,则在你的程式和 Virtual OS 之间,还有一个 .NET CLR,如图 1 所示:


图 1
如果你利用Thinstall来包装.NET程式,那麽Thinstall所产生出来的EXE档内,除了包含你的原始EXE档之外,还有.NET Framework,以及Thinstall Virtual OS,如图2所示。


图 2
Thinstall Virtual OS 重新改写了 300+ 个 Win 32 API,这些 API 大都是和档案、Registry、Process 等有关。Virtual OS 内有自己的 Virtual File System 和 Virtual Registry。这些被改写的 API,将 Virtual File System 和 Real File System 整合起来,成为一个新的 File System;将 Virtual Registry 和 Real Registry 整合起来,变成一个新的 Registry。

当系统载入此 Thinstall 包装出来的 EXE 时,Virtual OS 会先被载入,Virtual OS 会接着载入原始的 EXE (以及.NET Framework),然後解压缩与解密、并该更改此 EXE(以及.NET Framework) 所使用到的这 300+ API,使其呼叫到 Virtual OS 的版本,而不是 Real OS 的版本。最後把执行权交给此 EXE。偷天换日的工作,於是完成!

因为 Thinstall 内部使用这套 Virtual OS 的机制,而不是针对 .NET 来设计一个专属的机制,所以 Thinstall 除了用来包装 .NET 程式,也可以用来包装 Java 程式,甚至 VB,或其他程式。我觉得这是一套很方便的工具,值得您也试试。

地址:http://msdn.microsoft.com/zh-tw/library/dd229231.aspx
东方之珠 2009-10-10
  • 打赏
  • 举报
回复
up
jhone99 2009-10-10
  • 打赏
  • 举报
回复
up
wiki14 2009-10-10
  • 打赏
  • 举报
回复
路过帮顶~
wuyq11 2009-10-10
  • 打赏
  • 举报
回复
支持
足球中国 2009-10-10
  • 打赏
  • 举报
回复
顶一下。

7,765

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧