離上一篇有營養的 post 已經隔好久了, 中間都是貼些五四三的, 哈哈... 今天再來貼點跟 .net development 有關的心得...
這篇要講的, 就是想做的像一般壓縮軟體, 可以把壓縮檔包成一個可執行檔, 這個執行檔包含解壓縮的程式, 同時也包含你自己資料, 包成單一執行檔無論攜帶或保存, 甚至隨時要解開都很方便...
看起來很普通的功能, 沒想到要實作起來還真麻煩... 一般標準的開發工具沒辦法產出這樣的 code, 頂多在 compile time 把一些資料當成 resource, 一起 compile 進 exe 內部. 不過即使如此, 這些動作都是在開發階段就完成的, 跟一般自解壓縮檔不同, 是執行階段才完成的...
跟同事討論了一下, 同事就土法練鋼, 試了第一種作法: 直接把 data 附加在 .exe 的後面.
出乎意料的, 這個方法竟然可行, 而且執行也沒有問題, 不過心裡就是毛毛的...
上面的動作, (1), (2) 還沒碰到. (3) 對於沒有簽章過的可以, (4) 沒去試.. 不過為了免除這些疑慮, 只好朝向其它較 "正規" 的作法... 從官方的工具著手.
為了避免第一種作法的疑慮, 整個流程到最後產出 .exe 為止, 都必需用官方認可的作法, 所以我能做的動作只剩下把原本很簡單的動作盡量拆解, 盡量拆到只留最後一步, 其它可以先作的一次做掉, 留最後一步在 runtime 時才呼叫外部工具來執行.
原本很簡單的 windows application project, 在裡面加上 embedded resource, build 就可以搞定的事, 現在必需這樣做:
其中 (1) 的部份可以事先作好, 未來在執行時就不用再重複 (1) 的步驟, 只要拿 module file 不斷的搭配不同的 embedded resource 就可以產出包含不同 data 的 exe file, 就像典型的自解壓縮檔那樣. 我簡單寫了一個 sample code, 試了一下, 可行. 有興趣的人可以抓去研究看看... 我的作法是:
大功告成! 產出的 start.exe 執行之後, 按下 [RUN] 就自動開啟圖檔, 就像你直接在 paint.jpg 上按兩下一樣... 完全達到我的期望 :D
這個作法看起來比較好, 因為產出的過程完全都是正式的作法, 不大會有什麼問題, 但是它也有缺點... Orz
試到這邊, 暫時想不到其它作法了, 沒想到要產出自定的 .exe 還真不容易... 如果有其它更好的作法, 就通知一下吧, 真的這樣在 web app 搞下去真是自找苦吃 :~~~
沒想到過個年, Microsoft 也有一堆更新 & 新版發行...
又在沒事找事做了... 這次是搬硬碟, 外加把部份網路從 100Mbps --> GBE, 不過這次沒有要添購新配備...
我很迷信大廠的硬體, 自己有在開發軟體最清楚, 只有大廠才有那個本錢把軟體的 bug 都抓乾淨, driver 更是明顯... driver 寫不好鳥問題一堆, 到這種年紀已經沒力氣跟那堆 driver 慢慢奮鬥了, 只要穩定可以用不要出問題就好...
因此之前買了一批 Intel 82559 的網路卡 (不是只有 chip 是 82559, 而是整張卡都是貼 intel mark), 有 Intel PRO/100 S 跟 PRO/100 Management+, 當時一次買了十幾張, 因為 yahoo 賣家要一次賣掉... 所以當然就全家的網卡全部換成這批. 就算主機板有內建 GBE, 還是把它給關了用 Intel 82559... 換了果然有差, driver 比那堆 d-xxxx, rxxxxt 的好多了, 也從來沒碰過傳一堆大檔傳到一半, 網路會停掉的問題, 而且經過便宜的 hub, 網路傳輸速率隨便也有 8x% ...
不過再怎樣, 100Mbps 終究抵不過 1000Mbps, 試過幾次從 server 拉 iso 到 desktop pc 燒 dvd 就受不了了, 一定得先把 iso copy 到 desktop pc 再燒, copy 得等上十分鐘, 燒完又是十來分鐘, 還要再 verify 又是十來分鐘... Orz
忍了一陣子, 決定趁過年調整一下, 剛好 desktop pc / server 的主機版都內建 Marvell GBE 網卡, 就把它們的封印拿掉直接對連, hub 也省了, 反正只有兩台有 GBE. 改這個很簡單, BIOS 把 LAN 打開, 網路線拔過去插上去就收工了.
麻煩的是網路設定的地方... 原本的架構是這樣, 有點小複雜, 除了基本的 NAT 之外, server 上的 RRAS 也設定了 demand-dial, 會自動連到公司的 VPN, 同時也是 VPN server, 接受我在外面撥到家裡的區域網路, 其它 DNS, DHCP, IIS, Net Share 等等的就不畫了..
最初的想法是, 直接多增加一個網段, 專門放 GBE 的 node. 不過家裡也才幾台電腦, 這樣弄好像太小題大作了, 加上這麼一來設定就越來越複雜了, DHCP 要調, static routing 要改... [:'(], 後來放棄, 直接用最不用大腦的 solution ... software networking bridge! 架構如下:
還好 windows 2003 有內建 bridge, 正好把 LAN 的兩張網卡串起來, 邏輯上只有一張 network interface, 只是實體接的線路有兩條 (100mbps / 1000mbps), 啥軟體設定都不用改...
試了一下效果, 不錯, 直接 copy 檔案就有 30% 的使用率... 跟以前 100mbps 的 90% 來比, 隨便也有三倍多的提升. 不過 30% 的瓶頸似乎是掉在 disk i/o 上面, 同時從不同 disk 拉檔案就可以飆到 60% ..
之前對 Marvell 的 chip 很感冒, 公司的 virtual server 2005 就是內建這個 chip, 流量很大, 開個一兩個禮拜網路就不通了, 但是怎麼看都正常, 就是網路不通, 得把 LAN 停用再啟用才會正常, 如果剛好人不在公司就完了, 得等隔天拔 monitor 直接到主機上面去點... 後來加了張 Intel 的網卡, 這張就一點事都沒有... 家裡流量應該不會這麼大吧? 哈哈, 就加減用一下就好..
看起來沒啥了不起的標題, 哈哈... 自從IE7推出以來, 這是第四次升級了... 之前每次裝好後, 一開IE7就應用程式錯誤, IE7就自己關掉了, 連進去打網址的機會都沒有 :~
之後每次看到 Microsoft 有新的 update 之後, 就會試著再裝一次, 終於這次過年前一大票的 security patch 裝了之後, IE7 就正常了 :D
原來裝 IE7 也是要看時辰的, 大年初一就 ok .. Orz
終於出來了, 從 scott 的 blog 看到的... 想要試看看的可以到這裡下載.
新版看來最大的改進就是換了 theme engine, 可以直接在 browser 上調整 UI, 效能也提高了.. 不過還沒試過也不曉得差在那裡 :P
其它改進我列幾個比較特別的:
其它就等裝了再研究看看, 先祝大家新年快樂 :D