2009年5月15日星期五

嚴重警告!!
以下內容極度無趣、乏味可能令您感到不安、恐懼,閱讀前敬請注意,並請身體不適者、心臟病患者、高血壓或是孕婦,按上一頁離開,如果在閱讀後出現嘔吐、心悸或是陽萎者請立刻停止閱讀,謝謝合作。


==================== 不怕死分隔線 ====================

這一陣子工作有一個不同的經驗,就是要對我們目前開發的軟體作 Windows Vista 的 Logo 認證,剛好前兩天又看到微軟決定停產XP要推Vista的新聞,不過雖然停產但是還是會繼續維護到2014年,對於使用者而言差別就是要換一個作業系統不過對於軟體開發者而言可是要將程式重新調整來適用新的Vista系統。Vista推出其實有一段時間不過感覺上用的人沒有很多,大部分人的抱怨就是過去軟體相容性的問題,還有惱人的UAC(User Account Control)功能,其實這兩個問題可以當作同一個問題,因為關鍵都是 使用者存取權限 的問題,以前我們用XP或是2000的時候都會習慣將我們的使用者權限調整到管理者(Administrator),所以在使用上幾乎可以存取磁碟上所有的空間跟檔案,也就是這樣Windows才會容易淪為木馬程式或是病毒的殂上肉,因為這樣所以新一代的Vista作業系統對於軟體應用程式(Software Application)在執行上所給予的權限只有標準使用者的權限(Standard User),這個標準使用者可以把他當作用Guest帳號登入的權限,也就是因為這樣舊有可以在XP上默認Admin權限使用的程式在Vista上通通會吃鱉,這就是為何多數一般使用者甚至軟體開發者對Vista望之卻步的原因。

這裡我會"概略"提一些將軟體從XP移轉到Vista上的關鍵,還有一些取得Software Vista Logo 認證的一些流程跟須知,細部研究還是要靠自己...或是靠朋友。

=============== XP 跟 Vista 的主要差異分隔線================

關鍵一. Manifest XML File檔案:這是啥?Vista作業系統上對於每個"可"執行檔內都必須包含manifest file,他的內容類似如下




其中要注意的是requestedExecutionLevel的值,一般來說會用asInvoker或是requireAdministrator,普通的應用程式應該都要用asInvoker來執行,他的意思是就依照目前你登入Vista帳號的權限執行,requireAdministrator顧名思義就是要你啟動管理者權限才能執行,這裡是Vista會不會跳出UAC權限允許視窗的重點,如果用了asInvoker應該就不會再跳出了,如果程式中沒有manifest則預設為requireAdministrator權限,requestedExecutionLevel為requireAdministrator的可執行檔案前面都會有一個小盾牌提醒使用者。

我是用VC2008編譯,VC2008內有manifest的設定頁,VC6沒有...要自己來。囧rz

關鍵二. 存取檔案的問題:這個問題應該是最討厭的問題也最讓人摸不著頭緒的問題,以前一般的應用程式會將成是本身的設定檔、紀錄檔或是Log都會寫在程式安裝目錄的資料夾裡面,例如 C:\Program Files 底下,不過在Vista上只要打開 UAC 在這個目錄寫檔案就會失敗,那如果這裡不能寫入檔案哪裡可以呢?是有一些地方可以提供選擇,%USERPROFILE% (每個使用者自己所用的文件夾) 或是 %ALLUSERSPROFILE% (程式共用區用),當然還有其他的位置這裡我只提出兩個,我個人建議都放在 %USERPROFILE% 裡面,為何呢?放在共用區大家用不是很好嗎?Vista上有一個特性,假如 A 使用者建立了 A.TXT檔案那麼 B 使用者就無法修改 A.TXT ,因為 A.TXT 隸屬於 A,那如果 B 使用者是管理者權限呢?那結果會有些不同,B 可以刪除 A.TXT 但是一樣無法修改,基於這個理由所以建議將各自使用者的設定相關檔案放在自己的目錄內而別放在共用區,大家只要進一步了解 UAC 的防護機制後就比較能夠避免寫出與他衝突的程式碼了吧。
總之,檔案別再亂放了。XD

滿足了上面兩個 XP 跟 Vista 主要差異後你的程式應該可以順利啟動,至於能不能正常運作那還有得改哩。

=============== 獲得 Vista 應用程式軟體認證分隔線 ===============
為何要申請 Vista Software Logo?
這個問題我想了很久...我想應該就跟冷凍豬肉要用CAS的標章是一樣的吧。要如何申請?
流程如何?簡單的順序如下
1.申請加入微軟合作夥伴(MSPP)。
2.在合作夥伴的網頁登入要驗證的程式。
3.利用Microsoft Product Identification產生程式的身分.XML檔案。
4.申請VeriSign的Certificate。
5.在Windows Quality Online Services(Winqual)網站以公司身分註冊一個帳號。
6.下載Winqual.exe並將Verisign取得的簽章簽入Winqual.exe內,此一行為代表此簽章等於本公司產品申請驗證所要用的簽章。
7.上傳已經簽好的Winqual.exe到Winqual網站,完成此步驟本公司在Winqual的帳號才算註冊完成。
8.提交完成後保留對方給予的檔案跟ID,日後再提交測試到VeriTest的時候會用到。
9.到VeriTest網站註冊並填寫申請資料。(要信用卡繳錢)
10.並填寫放棄測試的項目申請書(WaiverSubmission.doc)針對不相干的Test Case部分跳過。
11.提交程式。(一併提交其他相關測試附件)
12.等結果。
看似簡單其實對於英文破破的我來說還真的很怕看錯,可以自己看

這裡有兩個地方要您花錢,一個是從 VeriSign 買數位簽章另一個是給 VeriTest 測試你的軟體,自己看
不過大略的步驟就跟我上面說的一樣吧。
接下來,我來介紹一下送交VeriTest驗證時會碰到的考古題,在這之前大家可能要先看 Requirements for the Windows Vista Logo Program for Software 這一份文件,這份文件是建立考古題的依據,分成三大類
1.Security and Compatibility(安全性跟相容性)
2.Installation(安裝)
3.Reliability(可靠度)
看過Requirements之後會比較容易了解Test Cases 是在玩什麼花樣
CertifiedforWindowsVistaProgramTestCases.doc(所有的考古題來自這份文件,下方有相關連結)

TEST CASE 1.Verify all of the application’s executables contain an embedded manifest that define its execution level. 只是用CFF Explorer來檢視程式內的可執行檔requestedExecutionLevel level,很容易。

TEST CASE 2.Verify Least-Privilege Users can not modify other users documents or files.利用Vista的切換使用者來各自執行程式並刻意去存取另外使用者的文件夾。

TEST CASE 3.Verify Least-Privilege user is not able to save files to Windows System directory. 讓程式去存取Windows目錄底下的檔案。

TEST CASE 4.Verify application installer does not have a 16-Bit installer, does not use or rely on 16-Bit code or components and does not attempt to install any non 64-Bit drivers on x64 versions of Windows regardless if application is a Win32 application or is native to 64-bit.把程式安裝到 x64 version of Windows Vista Ultimate,並執行運作。

TEST CASE 5.Verify application installed executables and files are signed.檢查安裝路徑下所有可執行的檔案類型是否都有加入數位簽章。

TEST CASE 6.Verify all kernel-mode drivers installed by the application are signed.Driver需要數位簽章。

TEST CASE 7.Verify application properly checks for Operating System version. 使用AppVerifier驗證所有的執行檔是否有呼叫 GetVersion() or GetVersionEx()的API。

TEST CASE 8.Verify application launches and executes properly using Fast User Switching.用Vista上切換不同使用者(權限)各自執行程式看看有無問題。

TEST CASE 9.Verify application launches and executes properly using Remote Desktop.利用Vista遠端桌面來執行程式並作一般操作測試。

TEST CASE 10.Verify drivers and services start in Safe-Mode. Driver或是Service在安全模式下執行運作。

TEST CASE 11.Verify application installer uses Windows Installer. 驗證安裝檔案是否包裝成.MSI的格式。

TEST CASE 12.Verify application’s MSI installer does not receive any errors from the Internal Consistency Evaluators. 透過Orca軟體安裝程式的.msi程式過程中不能出現特定的錯誤。

TEST CASE 13.Verify application’s installer contains an embedded manifest. 用Resource Hacker 3.4 檢查安裝檔是否有 manifest execution level 的 requestedExecutionLevel。

TEST CASE 14.Verify application launches with installed user token.用Resource Hacker 3.4 驗證安裝檔跟執行檔是否有相同的 requestedExecutionLevel。
如果是用MSI封裝則此步驟可以忽略。

TEST CASE 15.Verify application installs to the correct folders by default.利用AppVerifier檢查安裝路徑是否有產生錯誤。

TEST CASE 16.Verify ClickOnce application is signed with a valid Authenticode Certificate.這個 Test Case 是針對clockOnce的安裝放式來作驗證。

TEST CASE 17.Verify ClickOnce application only stores data in installed user’s folders.同 Test Case 16,資料存放在自己的資料夾內。

TEST CASE 18.Verify Windows Installer package contains ProductName, Manufacturer, ProductVersion (major and minor), UpgradeCode, ProductCode and ProductLanguage property tags and that they are not null.用Orca來檢查安裝檔.MSI是否有包含必要相關資訊。

TEST CASE 19.Verify application creates uninstall registry key and values.使用Orca來檢查安裝後是否有在 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\ 內寫入 Uninstall的資訊。

TEST CASE 20.Verify application does not try to write to or replace any WRP registry keys or files.用AppVerifier檢驗安裝過程中不會寫入任何的WRP Registry Key或是Windows System File。

TEST CASE 21.Verify the application does not use nested install custom actions.用Orca打開安裝程式.MSI檢查CustomAction table沒有作不允許的安裝動作。

TEST CASE 22.Verify the application does not add custom columns to the Windows Installer’s standard tables and that any custom tables or properties are not prefixed with ‘msi’.用Orca檢查安裝的.MSI檔案跟Schema.msi比較內部的Standard Table欄位不可以有變更,自訂欄位的話則要有"msi"的prefix.

TEST CASE 23.Verify the application rolls back the install and restores machine back to previous state.複製並製造一個會安裝失敗的.MSI檔案,比較安裝前跟安裝失敗後系統是否有恢復安裝前的狀態。

TEST CASE 24.Verify the application does not force a reboot during install.用Orca檢查.MSI檔案內是否有ForceReboot的設定。

TEST CASE 25.Verify the application properly handles files in use during install. 用Orca檢查 MsiRMFilesInUse property,如果沒有存在的話必須加入對應的Dialog跟property。

TEST CASE 26.Verify the application can be installed quietly from the command line.用 Orca檢查FASTOEM欄位,並且測試安靜安裝。

TEST CASE 27.Verify the application’s Windows Installer ComponentID table does not contain null values.用Orca檢查.MSI檔案內 Component Table必要欄位不可以為NULL。

TEST CASE 28.Verify the application’s Windows Installer Package does not contain more than one COM Server for each Component.用Orca檢查.MSI檔案內 Component Table檢查不能有超過一個以上的COM Server。

TEST CASE 29.Verify the application’s Windows Installer Package does not contain more than one shortcut for each component. 用Orca檢查.MSI檔案內 Component Table檢查每個component不能有一個以上的捷徑。

TEST CASE 30.Verify the application is Restart Manager Aware.用Restart Manager Tool(rmtool.exe)來測試WM_ENDSESSION or WM_QUERYENDSESSION訊息。

TEST CASE 31.Verify application does not break into debugger with the specified AppVerifier checks.執行程式用 AppVerifier開啟Debug模式並執行操作。

TEST CASE 32.Verify that he application’s UI thread only handles exceptions that are known and expected.使用ThreadHijacker來讓程式產生 Access Violation,然後會產生 Windows Error Reporting(就是錯誤回報或是要你Debug那個視窗)。

總結:
大家可以概略看出這些Test Case主要的精神就是前面提到的三大Requirements,不過更實際來看就是
1.你的程式要在UAC下正常運作,不可以亂存取禁止的目錄 。
2.安裝程式必須用MicroSoft的MSI格式或是ClickOnce方式 。
3.萬一程式發生錯誤能夠透過 Windows Error Report 來回報錯誤並紀錄錯誤資訊 。
4.數位簽章 。

雖然有些Case我也是很模糊XD,真怕我接下來要準備送驗的過程會出差錯....唉,該好好唸英文了。Orz
跟我一樣被指派申請Vista Logo認證的苦主 http://www.codeproject.com/KB/vista/certificationbyexample.aspx (VB.Net + C#)
已經獲得Vista Logo認證的程式 http://support.microsoft.com/kb/933305
申請VeriSign的數位簽章憑證流程 http://www.wosign.hk/support/MS_Authenticode_DigitalID_guide.htm
針對某些Test Case詳解 http://blogs.msdn.com/amitava/rss.xml
提供其他Vista Logo相關連結 http://dotnet.org.za/ahmeds/archive/2006/12/15/Vista-Logo-Links.aspx
MSDN http://forums.microsoft.com/MSDN/ShowForum.aspx?ForumID=904&SiteID=1

2009年5月13日星期三

今天是笨笨在那的第二天,这几天的日记都没有写在日记本里是因为写字的时候实在太痛苦了,手也会发抖。
看到它的时候它并没有原先期待的那样。不过伊丽莎白项圈拿了下来,一走进医院,扑面而来的是熟悉刺鼻的骚味,那种味道只有笨笨在发情时才会留下的味道。但在我闻来时那么的刺鼻那么的不好受。
我看到他很紧张的样子,我试图接近他,叫他,抚摸他。他很茫然,似乎不记得我是谁,我叫他,他并不看我,忙着舔自己的JJ,蹲着排尿。
我知道他还是很痛苦,紧张的环顾四周,陌生的环境让他的精神崩溃了吧,可是他怎么又会想到我此时此刻说不出的难受。
过了会时间,貌似他放松了一点,我柔柔他的小下巴,他喝了点水,很口渴的样子,我注意到他排泄的时候小便出来的水还是血样的脓水,就这么一滴一滴的,看的我很心疼很心疼。好几次我看他的时候都难受死了,但是旁边有很多人,我忍住了。
每次其他狗狗一叫他就会发抖,他从来都没有经历过这样的场面呀,这几天魂魄都吓掉了,就这么呆呆的样子。
可是。。可是我好想把他搂在怀里,永远不想分开,永远不想让他痛,让他害怕,让他不知所措。。。

2009年5月12日星期二

今天是笨笨离开我的第一天,它被放在宠物医院里了,今天去看它的时候它身上湿湿的,我看到有一根管子插在他的尿道口,红肿显眼。虽然他头上带了伊丽莎白项圈,却还是很费力的想去舔舐伤口,看的出它很疼,很痛苦。但是我们去了,特别是看到妈妈它对着妈妈叫了,眼镜好大好大,还是很漂亮的样子。它的右脚上插着留置针。还要这样连着吊针三天,想想就难受。我知道这是它第一次离开家里在外面陌生的地方过夜,一定很孤单。它看到我的时候把脸凑到我的手上让我摸摸,但是下身还是太疼了,所以总是时不时头往身下蹭。
因为带着防护圈的关系,喝水和吃东西很费力。旁边的人说现在终于排除的尿液干净些了,但我知道,其实都是它喝水打翻的水,不是他的尿,看到它终于吃了点东西,也就安慰了些。晚上在家里没有这个小东西的声响还真是有点不习惯,一直想它。。。一直想。。。。
明天我会继续去看他的,谢谢亲爱的。

2009年5月11日星期一

天气热热的,闷闷的,回家路上一路喘不过气来。
我向来不会写煽情的文字,可是这次,我真的有点控制不住自己。特别看着它瘫睡在地上挣扎无力的样子,我不知道怎么才能让它好受些。。。
妈妈说年纪到了,不给它治疗了,我看着它一遍一遍走到便盆却尿不出来,心里很酸很酸。
它以前不是这样的,它很乖,它从来没有犯过错误,它很听话很听话的。
我记得以前帮它打针呢,我记得以前晚上房间黑都是它陪着我的,我记得我和它说心里话的,我记得它陪我的!它陪我的,在我最怕的时候,在我最孤单的时候,有它在身边我就不害怕的。
如果它离开我,如果我以后在房间里再也看不到那晃来晃去的肉滚滚的小身子,再也听不到它的喵喵,再也不能抱它。。。
我再也看不到它了,它那么漂亮,那么乖的....
我记得以前给它打针的时候它眼镜红红的,但是还是很听话的,手臂都肿起来了,也没有叫。。。就是很听话的站在马桶上让我给他打针的。
怎么现在又是这个样子,怎么会这样,我不该给它吃猫粮的,我应该给他每天煮鱼吃。
我现在补救还来得及么?笨笨,我每天回家给你买鱼吃好吗。。。
求求你,不要离开我...
求求你。。。
上帝,不要带它走。。。
:(

2009年5月9日星期六

如果真的是肝癌晚期了,是不是一切都晚了一点。
祈祷。
教堂仍然安静,内心澎湃不已。
终究还是没能抵得住考验,两者都是。
心情其实两个人都一样。
其实我很独立,不过更喜欢能够带给我依靠感和归属感的成熟男人。
他则喜欢凡事迁就他的女孩子,
只要不开心了,都是女方不懂事造成的。
这点我无论如何受不了。
论及过往,也只是对方独家记忆。
与他人无关。
与现在的你无关。
每一段过往都有甜蜜与苦涩,他人无权评论。
我不不能仍受你这样说他,正如我不能仍受下一个人这么说你一样。
慷慨的分手总比违心做普通朋友好。
我还是我,你还是你。

2009年5月6日星期三

因为有所期待,所以才会失望吧。
也许没有期待就不会失望了。

2009年3月15日星期日

不开心了就。。。

装死人。。。。
随便弄哪能。。。娃哈哈

2009年2月16日星期一

本命年的情人节充满着suprise

a romatic valentine's day :)

2009年2月3日星期二

搞笑~。。。佳佳为啥要唱这首歌。。。。
他的妈妈好年轻好时尚哟~感叹自己都比他妈妈还要胖了。
我好难受呀,这三年怎么会变的那么突然。

某人说我在乎你。
某人说。。。


白羊的温柔你不明白。



转变弹指三年间。





我喜欢单纯的人。

2009年1月28日星期三

今天是大年初三,城隍庙人非常的多,妈妈给我买了小金牛配了根红绳~我给妈妈买了眼霜~~~纪念一下!我爱爸爸妈妈!