Re: [問題] .net的 exe file問題...
※ 引述《scdog (嘿ﰠNN  )》之銘言:
: 請問一下我把complier後的exe檔拿去一台沒裝.net的電腦上執行
: 他卻說需安裝.net framework....並無法初始話程式
: 我的exe file是在debug目錄下直接拿出來的
: 請問該如何解決,或run exe file需要packageㄇ??thx
: ※ 編輯: scdog 來自: 61.218.111.98 (01/13 09:54)
: 推 libery:要執行一定得裝.net framework 59.104.238.148 01/13
不知道這個對您有沒有幫助 :]
============================
大內高手專欄:
工具介紹: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 的意思,讓軟體免於安裝的困擾。利用 Thinst
all ,可以將一個軟體的許多檔案包裝 (package) 成一個 EXE 檔,不需要解壓縮,不需
要安裝 (install),就可以直接執行。利用 Thinstall ,你可以將 .NET Framework 和
你的程式,以及相關的檔案都包裝在一起,變成一個自給自足的 EXE 檔。
除了將 .NET Framework 包裝進 EXE 之外,Thinstall 還有一些額外的好處,包括了:
可以將 3rd Party 程式庫,以及相關的檔案,都包裝在一個 EXE 檔中,讓程式執行時,
不會有檔案遺失的狀況。
Thinstall 使用的壓縮技術,壓縮比例可以比 ZIP 或 RAR 更高。
Thinstall 並不會將整個 .NET Framework 都包裝進 EXE,只把有使用到的部分包裝進 E
XE,加上使用壓縮技術,這使得包裝出來的程式體積不大,一般都在 3~8MB 之間。
Thinstall 有使用加密技術,可以保障資料檔案不會輕易地被他人窺視與竄改,程式也更
不容易被反編譯和反組譯。
Thinstall 整合安裝程式的功能,可以建立開始選單 (Start Menu) 與桌面捷徑 (Deskto
p Shortcut)。
Thinstall 可以讓軟體變成 30 天試用版 (Trial)。
使用 Thinstall 也不是全然沒有缺點,最明顯的缺點是,執行效率會或多或少受到影響
,且浪費更多記憶體。我的經驗是,大多數的程式感覺不出效率變差,但某些用到特殊的
技巧的程式,其效率的確變差了。另外,使用 Thinstall 時,必須考慮到法律的問題。
因為 Thinstall 將許多程式庫都包裝進來,這些別人開發的程式庫 (包括.NET Framewor
k) 是否可以隨著你的 EXE 而散播,Thinstall 的使用者需要好好研究其授權方式。
Thinstall 的使用方式非常容易,你可以在 Thinstall 的網站上看到用法介紹。較值得
注意的是,Jitit 公司不希望 Thinstall 產品被不合法地盜用,所以對於 Thinstall 的
保護相當嚴格。使用 Thinstall 時,電腦必須能上網,因為 Thinstall 需要連線到 Lic
ense 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 大都是和檔案、Reg
istry、Process 等有關。Virtual OS 內有自己的 Virtual File System 和 Virtual Re
gistry。這些被改寫的 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 的版本,而不是 Re
al OS 的版本。最後把執行權交給此 EXE。偷天換日的工作,於是完成!
因為 Thinstall 內部使用這套 Virtual OS 的機制,而不是針對 .NET 來設計一個專屬
的機制,所以 Thinstall 除了用來包裝 .NET 程式,也可以用來包裝 Java 程式,甚至
VB,或其他程式。我覺得這是一套很方便的工具,值得您也試試。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 211.74.92.43
推
140.109.235.41 01/14, , 1F
140.109.235.41 01/14, 1F
→
140.109.235.41 01/14, , 2F
140.109.235.41 01/14, 2F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章