程序有英語 簡體中文 兩種語言,根據(jù)操作系統(tǒng)環(huán)境來選擇language.
代碼下載:http://bilaopao.download.csdn.net/
開發(fā)工具:VS 2008

修復(fù)過程分【普通修復(fù)】和【強力修復(fù)】。
XP和VISTA/WIN7下的修復(fù)操作還是有很多區(qū)別的。但基于的原理是一樣的。 并且因為Vista/Win7下的Smart Card 服務(wù)的scardsvr.exe可執(zhí)行文件被更改為scardsvr.dll,也就沒有了scardsvr的相關(guān)安裝命令。我用dependency查看了下scardsvr.dll,只能看到一個入口函數(shù)。能力有限,google了一些資料也沒有結(jié)果。就沒分析下去了。
【普通修復(fù)】的修復(fù)過程(以XP下的修復(fù)過程講述,vista/win7下操作請看代碼):
(1)檢查"智能卡服務(wù)"是否為自啟動。并設(shè)置其為自啟動。
(2)檢測服務(wù)當(dāng)前狀態(tài)是否為SERVICE_RUNNING,并設(shè)置其狀態(tài)為運行中。
(3)檢測前兩步是否成功,如果成功則向用戶彈出messagebox詢問moveable device功能是否正常。
(4)如果功能仍abnormal,則初步判斷是服務(wù)登陸賬戶為非"NT AUTHORITY\LocalService" ,則用CreateProcess來運行 sc.exe config SCardSvr obj= \"NT AUTHORITY\LocalService" password= "" ,改變其用戶為localservice(smart card service只有在此登陸賬戶下才正常運行)。
(5)如果在普通修復(fù)過程中遇到服務(wù)查詢不到等error時,程序自動啟動強力修復(fù)來安裝smart card service.
注意:普通修復(fù)中的第3,4步中有點問題,在這個地方其實最好是直接檢查服務(wù)的登陸賬戶。然后做出相應(yīng)的動作,但是我這個地方?jīng)]有想到實現(xiàn)的辦法。望前輩提示。另外就是sc的命令格式有嚴格的限制,編碼的時候要注意等號后面首先是空格。我當(dāng)時被這個空格困擾到了。
【強力修復(fù)】的修復(fù)過程(XP下的修復(fù),vista/win7 下沒有強力修復(fù))
其實強力修復(fù)的過程就是網(wǎng)上流傳的那個修復(fù)過程,我只不過在這個修復(fù)過程中增加了驗證和配置修改。
修復(fù)過程:
(1)ScardSvr.exe reinstall
(2)regsvr32.exe SCardssp.dll
(3)sc.exe config SCardSvr obj= \"NT AUTHORITY\LocalService" password= ""
(4)通過以上三步之后,剩下的配置修改就跟普通修復(fù)過程一樣了。而以上三步通過CreateProcess和WaitForSingleObject來配合控制。
應(yīng)該差不多了。代碼是半個月前寫的,一些地方可能有疏漏。
在代碼實現(xiàn)中還有很多地方需要注意,我也都在代碼中做出了注釋。可自行查看。
如需交流,可mailto:pencil@yeah.net MSN:pencil@yeah.net