Showing posts with label Tips and Tricks. Show all posts
Showing posts with label Tips and Tricks. Show all posts

Friday, December 28, 2007

SAM Initialization Failed

前一陣子,老哥抱怨他的電腦有問題。根據當事人的描述,出門前保持開機,回來卻變成待機(Suspend To RAM[1]),隨後開啟電源,先是快速閃過出門前的畫面,隨即立刻出現BSOD[2],但他沒注意螢幕顯示的錯誤代碼(相信很多人都不會吧XD),在這樣的情況下只有重開機一途。重開機之後進桌面之前就出現下面的畫面:


Fig : SAM Initialize Failed (Click to enlarge)



那個中文翻譯真是折磨人,安全性帳戶管理員是啥XD,一時間還沒反應過來,實際上就是指Security Account Manager,中文翻譯還蠻白話的。它的本尊就是C:\WINDOWS\system32\config\SAM這個檔案,裡面負責儲存這台電腦的帳戶資訊。

通常碰到這種情況,會先嘗試以下兩種不需額外工具的方法
  • 進Safe Mode並查看系統記錄檔,裡面有無BSOD的相關訊息,或者是BSOD前的徵兆,通常可以看出些端倪,這樣才能對症下藥。

  • 使用Last Known Good[3]直接進OS看看。此方法不需額外的操作,就有可能讓系統恢復正常,成功的話就算是撿到了XD,但因為Last Known Good可能會導致最後一次開機後修改過的系統設定值遺失,通常還是先試試Safe Mode再說。



首先進入Safe Mode試試看,結果在出現帳戶畫面[4]之前,先出現了剛才正常模式中碰到的錯誤訊息,由此可以確定是SAM壞掉了。即使未必適用此問題,重開機後也順便試了Last Known Good,當然問題還是沒解決。由於SAM正常情況下不太可能損壞,其它可能的原因就是硬碟壞軌,由於其它的資料有一定機率也受到影響,處理起來需格外小心。



瞭解最可能出問題的部分之後,上Google簡單爬文後,立刻找到Microsoft自家Knowledge Base有100%相關聯的文章,真是太幸運了XD,省了不少爬文的時間。

照文章中的說法,此問題應該就是SAM這個檔案故障或遺失所造成的。由此可以推論,若能放回正常開機時的SAM,應該就能解決問題。快速瀏覽文中提到的三種方法,最後一種的重灌就再說吧;方法二提到的Repair資料夾,在正常電腦看該資料夾裡面檔案修改的時間,似乎是該電腦XP剛裝好的時間,若使用這裡的SAM覆蓋系統的SAM,就會如文章所說一樣,系統內所有帳戶資訊都會消失,顯然這也是個不得已的辦法,只比重灌好上一些。幸運的是,平常有幫他的硬碟製做完整備份,即使這個備份已經有半個月之久了XD,不過SAM極少變動,影響倒是不大。

最後的解決方法
,就是直接從備份中取出SAM檔,再使用BartPE開機並覆蓋故障的SAM檔。為了安全起見,覆蓋前先備份config資料夾中所有的檔案,再進行覆蓋,這樣有必要時也可以恢復成未覆蓋前的狀態。重開機之後,問題頓時解決!重開機數次,問題也未再出現,任務算是圓滿達成。後來使用HDDScan掃描,運氣還不錯,未找到任何壞軌,否則就要花大錢囉。



這個小故事告訴我們:
  • 硬碟要常備份,否則必要時將無先前備份檔可以取回、覆蓋。若碰到更嚴重的硬碟壞軌,資料損失造成的傷害是無法估計的。

  • 使用Windows系統,平常可以準備BartPE光碟或裝有BartPE的USB Drive,要不然會很難操作已經故障的系統;熟Linux的話,也可以使用KnoppixLive CD存取檔案系統;預先在硬碟安裝另一個XP也是個選擇。BartPE又是另一個說來話長的故事了,有機會再開一篇吧XD。



[1] Suspend To RAM(S3)是待機的一種。另一種在XP關機選單中,同樣也叫做待機的是Power On Suspend(S1),至於XP關機選單的待機功能會對應到哪一種狀態,則視BIOS中設定S1或S3待機而定。實際上S3會讓系統看起來像是關機一樣,切斷除了RAM以外的電力;S1就和一般開機類似,通常電源燈會閃爍,並供應少部分裝置的電力。

[2] Blue Screen Of Death(BSOD),俗稱藍底白字當機。在這裡可以看到歷代Windows系統的BSOD。

[3] Last Known Good Configuration 可以在XP的F8開機選單中找到。這個選項會將以下Registry的Key,還原成前一次正常關機或重開機的狀態
HKEY_LOCAL_MACHINE\System\CurrentControlSet

這個Key裡面的內容,主要和驅動程式較有關係,所以問題若與驅動程式無關,可能就幫不上忙了。這裡有較具體的說明此功能適用於哪些情況。

[4] 在Windows XP使用者登入的畫面中,即使平時只顯示一個使用者帳戶,進入安全模式時,仍應出現Adminstrator帳號;平常登入畫面中,XP會隱藏此帳號。

Saturday, April 21, 2007

AutoRun with Opening Specific File

許多市面上的光碟,只要一放入光碟機,就會啟動光碟上的程式,或是做一些預先設定好的動作,這個功能稱為AutoRun。它最大的好處,就是可以讓使用這片光碟的人,不用做額外的動作,就能知道光碟裡面大致上有什麼內容,是個相當方便且重要的功能!假如自己做的光碟也想要有類似的功能,只要研究本身有AutoRun功能的光碟,自然也能有相同的功能。但常見的光碟,啟動的內容多半是可執行檔(.exe),倘若今天想要讓使用者看到的是文件、影像或圖片,並且使用系統預設的程式,就像我們對檔案點兩下打開的動作一樣,那又該怎麼做呢?由於這樣的範例並不常見於市面上的光碟,本篇文章的重心會放在這裡。

Autorun功能依賴以下兩個部分:一是系統有啟動Autorun功能,若系統未啟動此功能,即使光碟上有Autorun.inf,都不會自動顯示出來;另一個是光碟根目錄要有Autorun.inf,這樣Windows才知道要開哪些檔案、程式,或者是要換成哪個圖示。

在繼續探討之前,我們先來瞭解一下,能夠啟動可執行檔的Autorun.inf長什麼樣子:

[autorun]
OPEN=SETUP.EXE
ICON=D2X.ICO

理解能力較好的讀者,應該能猜出openicon這兩行的用途吧!顧名思義,open就是光碟一放進去,Windows該執行什麼指令;icon則是光碟片的小圖示該由哪個檔案來替換。這兩行的意思,就是要Windows啟動光碟片上面的setup.exe,並且把光碟機的小圖示替換成D2x.ico。

問題來了,如果今天不是要啟動可執行檔,而是要開啟特定的文件,例如1.txt,是只要把setup.exe替換成1.txt就好了嗎?這樣做的話會得到下面的結果。


Fig: Failed to open specific file.


Oops! 顯然這樣是不行的。在網路上找到了二種可行的辦法:第一種是把原先的1.txt改成start 1.txt,這在某些情況下是可以運作的,不過在開啟檔案之前,會先出現一下像DOS視窗的東西,然後才會開啟你設定的檔案,感覺和一般的操作習慣略有不同。而另一種是把open換成shellexecute,然後在=號的後面,直接加上想要開啟的檔名就可以了,但此方法並無法在Windows 98下使用。

為了瞭解這兩種方法在特定環境下的運作情形,筆者以此兩方法,分別在Windows 98, 2000, XP三套作業系統進行測試。

方法一:使用open

[autorun]
open=start 1.txt
ICON=D2X.ICO

方法二:使用shellexecute

[autorun]
shellexecute=1.txt
ICON=D2X.ICO


在Windows 98下:
方法一:正常運作
方法二:直接開啟光碟根目錄,並未執行其它指令

在Windows 2000下:
方法一:剛放進光碟時,會顯示錯誤訊息框:「存取的檔案或裝置被拒絕」。若在光碟機圖示按滑鼠右鍵並選擇自動播放,則出現「Windows找不到start.exe」
方法二:正常運作

在Windows XP下:
方法一:無反應。另一台也是裝Windows XP的電腦,則是詢問要用哪個程式來開啟光碟機的根目錄。
方法二:正常運作

總合以上測試的結果,若不考慮Windows 98的相容性,方法二是較好的選擇。最後您只需把上面方法二的內容,完整的存成Autorun.inf,並修改shellexecute後的檔名,改成想自動開啟的檔案名稱,最後再放在光碟的根目錄中,燒錄完成後就能享受此功能帶來的好處!

註:若要執行的檔案,其路徑或檔名中包含空白,其結果將無法預知!在筆者的XP能正常使用,但在另一台卻說找不到檔案,解決辦法可用修改檔名,或以_來取代空白。


參考資料:
CD/DVD AutoRun basics
AutoRun編寫【基礎篇】 ICON圖檔製作

Friday, February 09, 2007

Foobar2000: Replay Gain

聽音樂經常會碰到一種問題,由於個人習慣的關係,常會把不同專輯的歌,混合在同一個播放清單中,這樣一起播放比較方便。但每首歌呈現出來的聲音大小都不一樣,於是某些歌變得相對小聲或是相對大聲,這時為了讓每首歌盡量一樣大聲,所以必須經常性的手動調整聲音的大小。Replay Gain就是用來解決這種惱人的問題,筆者會在本文中介紹實作的方法。

關於Replay Gain的技術資訊,在Wikipedia英文版中文版有更詳盡的說明,本文中並不針對技術層面做太多解釋。簡單來說,先使用軟體計算每首歌響度期望響度的差值,而期望響度通常設為89dB聲壓,即得到增益(Gain),然後再分別存至每個檔案的metadata中。當遇到支援Replay Gain的播放程式時,會先檢查音樂檔案中的metadata是否包含Replay Gain訊息,若偵測到則會自動調整播放程式的音量輸出,使音量增加或減少至指定響度。

整個過程中,只是在音樂檔的metadata中附加Replay Gain訊息,並未對原始聲音做任何調整。這意味著若不再使用此功能,或想還原成原來的響度時,也只需清除metadata中的Replay Gain訊息。傳統方法中,需要重新編碼聲音檔案,此時對原始的聲音資訊已經造成傷害;若想要復原成先前的狀態也不可能,因為原始的聲音資訊已經不存在。

使用此功能時,必須要有軟體的支援才行,若軟體不認得Replay Gain的metadata時,則Replay Gain不會起任何作用。目前在Windows中,foobar2000Winamp有支援此功能,而foobar2000在官方安裝檔內就有包含具有此功能的Plug-in,Winamp則需要額外安裝外掛程式來支援此功能。foobar2000可以播放和製作Replay Gain所需的資訊,且支援音軌增益(Track Gain)專輯增益(Album Gain)兩種模式,再加上程式本身體積小、執行速度快、介面簡單,使得它成為筆者最常用的音樂播放軟體。Winamp需透過外掛的支援,且似乎只有播放功能而沒有製作功能,筆者對Winamp較無研究,所以這部分有待其它人補充。

接下來筆者用foobar2000來實作此功能,過程極為簡單!本例使用v0.9.1版,各版本的操作方法大致上相同,新版或舊版的選項有些許出入的部分,請自行修正成相對應的選項。

首先開啟foobar2000,並放入您會同時一起聽的歌曲。放置完成後,按下Ctrl+A全選所有歌曲,或只選擇您想要處理的歌曲,再按下右鍵並選擇下圖選擇的選項。在本例中是一起處理所有的歌曲,也就是音軌增益(Track Gain)模式,您可以自行測試其它選項。


Fig. 1: Scan per-file track gain (Click to enlarge)


若您的歌曲本身含有別人先前寫入的Replay Gain資訊,則會看到下圖的對話框,若您需保留先前資訊的按「否」,而本例選擇寫入新資訊則需按「是」。若原先歌曲未含Replay Gain資訊,則不會出現此對話框。


Fig. 2: ReplayGain info already existed (Click to enlarge)


接著會出現下圖的視窗,中間顯示目前整體處理的進度。下排的文字從左至右,分別是經過的時間估計完成所需的總時間目前一秒相當於幾倍的播放速度,如71倍的意思是1秒的時間等於讀取71秒的音樂。


Fig. 3: ReplayGain scan in progress (Click to enlarge)


處理完成後會看到下圖的視窗,裡面會列出處理的結果。其中Gain和Peak值會出現在Album或Track,決定在之前選擇的模式。按下Update file tags後,Replay Gain資訊會寫入至相對應的檔案中。


Fig. 4: Scan result (Click to enlarge)


軟體操作的部分到這裡結束,再來就是您享受成果的時候了。在不同的曲子間切換時,聽聽看有沒有和之前不一樣呢?

Sunday, January 28, 2007

Firefox: Handy Quick Searches

前一陣子在整理Firefox的書籤時,在Bookmark Manager中發現Quick Searches這個資料夾,這是以前從來不曾注意的地方。總覺得裡面的連結似乎不太會再用到,正當要刪除時,看到後面的註解時停了一下:


Fig. 1: Handy searches that can be performed in the location bar (Click to enlarge)


而這個功能有多Handy呢?您可以直接在Firefox輸入網址的地方,像下圖這樣輸入:


Fig. 2: Search Wikipedia by Quick Search of Firefox


按下Enter之後,就會直接出現Wikipedia中Wireless Distribution System這個詞條,有沒有覺得很神奇呢?從這個例子中,您可以得知它是以keyword StringToSearch這樣的格式進行搜尋,且StringToSearch的部分,還可以容納多個字串,即使中間有空格也沒關係。

在Wikipedia Quicksearch 的書籤按右鍵並選擇Properties,您會看到如下圖的畫面,其中%s就是您要找的字串,而wp就是在網址列使用的keyword。也就是說,當您在網址列上輸入wp StringToSearch時,Firefox就會在您的書籤中,找到keyword是wp的書籤,並且將網址中%s的部分換成StringToSearch,然後取回搜尋網頁,一切就是這樣的單純。


Fig. 3: Location and Keyword


接下來我們來看看要怎麼樣利用這項功能,來製作自己想要的搜尋連結

第一個例子是不含StringToSearch,僅做為快速啟動用的連結,本例使用中華郵政WebATM系統

首先您必需先建立該書籤。建立完成後,在書籤上按右鍵並選擇Properties。


Fig. 4: Bookmark properties without StringToSearch


在本例中,輸入它的keyword為webatm。按下確定後,回到Firefox,直接按下Alt+D鍵跳到網址列,接著輸入webatm,按下Enter即馬上顯示中華郵政的頁面,有沒有覺得很方便呢?

第二個例子是有StringToSearch,可進行字串的搜尋,本例使用Dr.Eye線上字典

進入該網站之後,在輸入單字的地方輸入任意單字,本例為apple,完成後按下搜尋,其結果會顯示在新視窗上面。接著在網頁空白處按下右鍵,並選擇Bookmark this page,再選擇您想儲存的地方。


Fig. 5: Dr.Eye online search (Click to enlarge)


儲存完成後,同樣在書籤上按右鍵並選擇Properties,您會看到如下圖的畫面。需要特別注意的部分,是要在Location中找到剛才輸入的關鍵字,這樣我們替換後才能拿來搜尋。以本例而言,其中有一段是w=apple,請替換成w=%s。下面keyword的部分,本例輸入dreye做為keyword。按下確定後,至網址列輸入dreye another,按下Enter後就會出現another這個單字的解釋,與您直接在Dr.Eye官方網站上搜尋是一樣的結果。


Fig. 6: StringToSearch and Keyword



最後有幾點是需要注意的:
  • 實際上測試時,發現中文字串也可以這樣搜尋,但是有時候會出現亂碼,像是Dr.Eye中,並無法用此方法搜尋中文,個人研判應該是網站本身的問題。大致上其它網站是能正常使用。
  • keyword部分可以包含空格。也就是說,像abc 123 xyz這樣是可以被接受的,但它不能用於搜尋的部分,僅能做為快速啟動,否則會發生錯誤。
  • 這個方法僅限於使用Get Method的網頁,也就是那些看得到網址後有一?再加上一長串資料的網頁。像LDOCE使用Post Method,其搜尋敘述是與網址分開上傳至伺服器,故無法使用此方法。