您的位置:首页 > 其它

Windows 7 上的 troubleshooting Pack 简介

2009-03-04 19:41 267 查看
本文来源于:
http://community.winsupersite.com/blogs/paul/archive/2009/01/12/crash-course-on-authoring-windows-7-troubleshooting-packs.aspx //

但是我想用更简单的中文来说明这个问题。

windows 7 上的troubleshooting 机制 仅仅是一个问题的预防解决方案, 不是一个问题分析方案,但是我看到一个MS 专家说可以产生分析报告, 这点我还不清楚。目前的机制就是将被动解决crash ,转成主动防御。

一定要windows 7 + Microsoft SDKs 7.0 。这两个是必须的。另外一定要会 power shell script .

在Window SDK的安装目录下找到 D:/Program Files/Microsoft SDKs/Windows/v7.0/Bin/TSPBuilder/Builder.exe这个 文件,这就是传说中的TSPBuilder 。那么使用很简单,以修改Calc.exe 的Program mode 为例:

在一个project 中有多个Rootcause,一个rootcause 对应一个问题,

每个Rootcase 中有一个verifier和resolver 。那么Verifier 是检测当前的状态是否OK ,如果不满足则要Call Resolver 进行 fixed 这个动作, 这个动作完成之后,又会Call verifier 进行验证。如果验证通过那么就OK。

还有一个project 中还有个东东,troubleshooter 这东东就是这场游戏的主角,主要负责修Call 用Rootcause的中的Verifier 进行检测,和其他 动作。

在verifier中的代码:就是检测Registry 中 Calc 的 layout 的值。

#Write a status message to the user
write-diagprogress -activity "Checking Enable calculate mode..."

#Get the popup blocker settings from the registry
$PopupMgr = get-itemproperty "Registry::HKEY_CURRENT_USER/Software/Microsoft/Calc" "layout"

if (($PopupMgr.layout -ne 2)) {

#Popup blocker is DISABLED. Rootcause DETECTED.
update-diagrootcause -id RC_ProgrammodeEnble -Detected $true

}
else
{

update-diagrootcause -id RC_ProgrammodeEnble -Detected $false
}

在 Resolver 中就是解决这个问题:

Write-DiagProgress -activity "Enabling Promgramming mode..."

$PopupMgr = get-itemproperty "Registry::HKEY_CURRENT_USER/Software/Microsoft/Calc" "layout"

if($PopupMgr.layout -ne 2)
{

stop-process -name calc
Set-ItemProperty -path "Registry::HKEY_CURRENT_USER/Software/Microsoft/Calc" -name layout -type "DWORD" -value "2"
start-process calc.exe
}

在troubleroot中要去检测这个问题,并进行解决:

可以直接使用./TS_tesssr.ps1 ---〉这个 ./TS_tesssr.ps1是verifier的scrippt 文件。

那么接下来build -> debugging 等 ,都很简单。

重要的是要注意这个东西有个认证机制,一定要注意你build 出来的东东,只能在你的机器上用, 如果别人的药用,那么就要自己安装认证了。

测试 :打开calc .exe 放到非程序模式,然后运行troubleshooter ,你就看到了结果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: