[已解决]WINPE环境下判断当前计算机操作系统所在分区
本帖最后由 zcx880517 于 2012-4-19 20:53 编辑RT,在XP或WIN7环境下使用目录宏只能判断当前使用的操作系统所在的分区
在WINPE环境下不显示
请教高手帮忙解决下。
WINPE环境下能判断出双系统或多系统情况甚好!感谢 帮顶。、坐等高人 回复 1# zcx880517
我认为如果是Windows系统, 读第1个分区下的 Boot.ini 文件肯定没错! 帮顶,表示关注 这是一个pe安装前段,看看有没有帮组。
Local $panfu = [ "Z", "Y", "X", "W", "V", "U", "T", "S", "R", "Q", "P", "O", "M", "N", "L", "K", "J", "I", "H", "G", "F", "E", "D", "C"]
For $i = 23 To 0 Step -1;检测是否存在BOOT.INI
If FileExists($panfu[$i] & ":\BOOT.INI") Then
$sysdrv = $panfu[$i] & ":"
ExitLoop
EndIf
Next
If $sysdrv = "" Then ;不存在BOOT.INI即检测BOOTMGR
For $i = 23 To 0 Step -1
If FileExists($panfu[$i] & ":\BOOTMGR") Then
$sysdrv = $panfu[$i] & ":"
start56x(6)
ExitLoop
EndIf
Next
EndIf 个人看法:
1、先确定硬盘数量。
2、确定硬盘活动分区
3、读取活动分区硬盘MBR,分析MBR类型。以前做过相关的东西,提供下几种不同引导的字符串特征如下:[["Windows NT 5.x 默认引导程序", "2c4463"],["Windows NT 6.x 默认引导程序", "627a99"],["Grub for Dos", "4d697373696e67204d42522d68656c7065722e"]]
4、参见5楼
#include <file.au3>
$arr = DriveGetDrive("FIXED")
$msg_str = ""
For $i = 1 To $arr
$folder = _FileListToArray($arr[$i] & "\", "win*", 2)
If @error Then ContinueLoop
For $j = 1 To $folder
$kernel_path = $arr[$i] & "\" & $folder[$j] & "\system32\kernel32.dll"
If FileExists($kernel_path) Then
$version = FileGetVersion($kernel_path)
$ver = StringLeft($version, 3)
Switch $ver
Case "5.0"
$msg_str &=$arr[$i] & " ---> Win2000" & @CRLF
Case "5.1"
$msg_str &=$arr[$i] & " ---> WinXP" & @CRLF
Case "5.2"
$msg_str &=$arr[$i] & " ---> Win2003" & @CRLF
Case "6.0"
$msg_str &=$arr[$i] & " ---> Vista" & @CRLF
Case "6.1"
$msg_str &=$arr[$i] & " ---> Win7" & @CRLF
EndSwitch
EndIf
Next
Next
MsgBox(0, "检测结果", $msg_str)
楼主兄找个能运行在PE下的系统检测软件,把它反了不就好了吗。 回复 8# pusofalse
P版什么意思呢,,话中有话嘛! 回复 7# veket_linux
很另类的方法,不过如果硬盘上安装了多系统的话,就不是很准确了 学习一下,不过这个估计比较复杂 谢谢楼上的分享。 留个记号,暂时用不到!
页:
[1]