|
HUNRYBECKY
银牌会员
积分 1179
发帖 442
注册 2006-9-9
状态 离线
|
『楼 主』:
[求助]如何判断系统是否是安全模式和添加协议?
我做了一个RPL无盘系统,因为要在替换大量的系统文件,在正常模式下是无法替换文件的,必须在安全模式下才能替换成功。我想实现这样的功能
1。判断系统当前运行的模式是否是安全模式?如果不是,提示用户切换到安全模式。
2。在安全模式下运行程序后RPL无盘使用的文件已经复制到系统中,但如何在本地连接属性中自动添加DLC和NETBIOS协议?(通过写注册表实现也可以)
我的部分代码(如何实现REM1和REM2中的步骤?):
@ECHO OFF
REM 本程序用于设置远程启动的注册表和其他项目,需要则安全模式下使用.
REM 1.判断系统是否是安全模式,这里采用人工判断
>%Temp%\msg.vbs ECHO intAnswer = MsgBox("本设置只能在安全模式下进行,要继续吗?" + vbCrLf + "安全模式下替换了相关文件后需要重新启动系统在正常模式下添加DLC和NETBIOS协议!", vbExclamation+vbYesNo, "小不点温馨提示!")
>>%Temp%\msg.vbs ECHO IF intAnswer = vbYes Then
>>%Temp%\msg.vbs ECHO Wscript.Echo "GO"
>>%Temp%\msg.vbs ECHO ELSE
>>%Temp%\msg.vbs ECHO Wscript.Echo "END"
>>%Temp%\msg.vbs ECHO END IF
FOR /f "delims=" %%i in ('"cscript //nologo %Temp%\msg.vbs"') do (GOTO %%i)
:GO
REM 2.复制协议文件和替换相关文件
XCOPY /S/C/H/R/Y backup\files\*.* %WINDIR%\ & CLS
REM 3.安装协议,这里提示手动安装
REM 4.设置注册表远程启动项目:其实可以直接把Directory改为字符串导入也可以,这里保留REG_EXPAND_SZ类型
REM 还需要注意,BINSUB工具只能修改ANSII编码格式,所以直接导出的注册表无法直接替换,需要使用TYPE命令转化为ANSII码(原创)
SET CPATH=%CD%
CD backup\reg\
ECHO SET RPATH=%CPATH%>RPATH.BAT
binsub RPATH.BAT \ \\ /I & CLS
CALL RPATH.BAT
TYPE CR.BAK >CR.SVR
binsub CR.SVR C:\\Rpl\\ %RPATH%\\ /I & CLS
REGEDIT /S CR.SVR & CLS
IF EXIST RPATH.BAT DEL RPATH.BAT /Q/F
IF EXIST *.ubk DEL *.ubk /Q/F
IF EXIST CR.SVR DEL CR.SVR /Q/F
CHCP 936 & CLS
SET RB1=HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\RemoteBoot\Parameters
REG ADD "%RB1%" /V Directory /t REG_EXPAND_SZ /d "%CPATH%" /f & CLS
SET RB2=HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\RemoteBoot\Parameters
REG ADD "%RB2%" /V Directory /t REG_EXPAND_SZ /d "%CPATH%" /f & CLS
SET RB3=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RemoteBoot\Parameters
REG ADD "%RB3%" /V Directory /t REG_EXPAND_SZ /d "%CPATH%" /f & CLS
CD..\..
DIR
GOTO END
:END
IF EXIST %TEMP%\MSB.VBS DEL %TEMP%\MSB.VBS /F/Q
@ECHO ON
EXIT 目前已经解决了是否是安全模式的判断,采用9楼everest79的注册表方法和15楼NaturalJ0兄的工具都可以,非常感谢两位的帮助,现在主要的问题是如何CMD下或使用DOS工具安装网络协议。
[ Last edited by HUNRYBECKY on 2006-12-30 at 10:16 PM ]
|
|
2006-12-29 05:22 |
|
|
HUNRYBECKY
银牌会员
积分 1179
发帖 442
注册 2006-9-9
状态 离线
|
『第
2 楼』:
在ACCESS911看到一个判断是否是安全模式的函数,可是这个函数怎么用脚本来调用呢?
GetSystemMetrics
The GetSystemMetrics function retrieves various system metrics (widths and heights of display elements) and system configuration settings. All dimensions retrieved by GetSystemMetrics are in pixels.
int GetSystemMetrics(
int nIndex
);
Parameters
nIndex
[in] System metric or configuration setting to retrieve. This parameter can be one of the following values. Note that all SM_CX* values are widths and all SM_CY* values are heights. Value Meaning
SM_ARRANGE Flags specifying how the system arranged minimized windows. For more information about minimized windows, see the following Remarks section.
SM_CLEANBOOT Value that specifies how the system was started:
0 Normal boot
1 Fail-safe boot
2 Fail-safe with network boot
Fail-safe boot (also called SafeBoot, Safe Mode, or Clean Boot) bypasses the user's startup files.
int result = GetSystemMetrics(SM_CLEANBOOT);
switchresult)
{
...
}
|
|
2006-12-29 05:30 |
|
|
everest79
金牌会员
一叶枝头,万树皆春
积分 2564
发帖 1127
注册 2006-12-25
状态 离线
|
|
2006-12-29 06:18 |
|
|
HUNRYBECKY
银牌会员
积分 1179
发帖 442
注册 2006-9-9
状态 离线
|
|
2006-12-29 10:20 |
|
|
HUNRYBECKY
银牌会员
积分 1179
发帖 442
注册 2006-9-9
状态 离线
|
『第
5 楼』:
没有人回答,在顶一下,在线等待,可能有点难道,我也搜索了整个世界,找不到相关代码。
|
|
2006-12-29 21:35 |
|
|
everest79
金牌会员
一叶枝头,万树皆春
积分 2564
发帖 1127
注册 2006-12-25
状态 离线
|
『第
6 楼』:
你在安全模式下与常规模式下对比下以下注册表键值
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
|
|
2006-12-29 23:00 |
|
|
HUNRYBECKY
银牌会员
积分 1179
发帖 442
注册 2006-9-9
状态 离线
|
『第
7 楼』:
Quote: | Originally posted by everest79 at 2006-12-29 23:00:
你在安全模式下与常规模式下对比下以下注册表键值
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control |
|
安全模式下除了不加载网络外还去掉很多其他东西,所以通过这样比较注册表不行的。
似乎通过注册表来添加协议是不可取的,我使用注册表监视工具对比添加前后的变化,发现改变的东西太多了,还有就是网卡不同可能会影响这些注册表参数。
寻求有没有什么DOS工具或命令来添加协议?
|
|
2006-12-30 00:01 |
|
|
everest79
金牌会员
一叶枝头,万树皆春
积分 2564
发帖 1127
注册 2006-12-25
状态 离线
|
『第
8 楼』:
这个键下好像保存了系统当前启动参数,而安全模式本来就是以safereboot的参数来启动的,所以让你对比一下,因为我没试过
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=\"Microsoft Windows XP Professional\" /noexecute=optin /fastdetect /safeboot:minimal
你看这就是安全模式了
|
|
2006-12-30 00:18 |
|
|
everest79
金牌会员
一叶枝头,万树皆春
积分 2564
发帖 1127
注册 2006-12-25
状态 离线
|
『第
9 楼』:
安全模式下:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control]
"SystemStartOptions"="NOEXECUTE=OPTIN FASTDETECT SAFEBOOT:MINIMAL SOS BOOTLOG NOGUIBOOT"
"SystemBootDevice"="multi(0)disk(0)rdisk(0)partition(1)" 正常情况下:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control]
"SystemStartOptions"="NOEXECUTE=OPTIN FASTDETECT"
"SystemBootDevice"="multi(0)disk(0)rdisk(0)partition(1)"
|
|
2006-12-30 00:25 |
|
|
everest79
金牌会员
一叶枝头,万树皆春
积分 2564
发帖 1127
注册 2006-12-25
状态 离线
|
|
2006-12-30 00:26 |
|
|
HUNRYBECKY
银牌会员
积分 1179
发帖 442
注册 2006-9-9
状态 离线
|
『第
11 楼』:
Quote: | Originally posted by everest79 at 2006-12-30 00:26:
为了这个问题重启了次电脑 |
|
非常感谢胸的回答。
|
|
2006-12-30 00:27 |
|
|
HUNRYBECKY
银牌会员
积分 1179
发帖 442
注册 2006-9-9
状态 离线
|
『第
12 楼』:
不知道能否添加协议,如果能这样就好了,我目前是提示用户手动添加协议的。
|
|
2006-12-30 00:27 |
|
|
everest79
金牌会员
一叶枝头,万树皆春
积分 2564
发帖 1127
注册 2006-12-25
状态 离线
|
『第
13 楼』:
无盘我不清楚,在有盘的LAN里,终端或只有一个连接的情况下,可以在正常模式下登录加载安装脚本,脚本主要功能是访问RIS路径来执行inf文件
例如你的netbios,其实你只需要打安装光盘提取ipx的inf及驱动文件就可以了
|
|
2006-12-30 00:39 |
|
|
HUNRYBECKY
银牌会员
积分 1179
发帖 442
注册 2006-9-9
状态 离线
|
『第
14 楼』:
Quote: | Originally posted by everest79 at 2006-12-30 00:39:
无盘我不清楚,在有盘的LAN里,终端或只有一个连接的情况下,可以在正常模式下登录加载安装脚本,脚本主要功能是访问RIS路径来执行inf文件
例如 ... |
|
我自己做的RPL无盘系统,只要把文件解压缩后执行上面的批处理就可以成功启动并登陆到终端系统了,很方便,但是批处理编程过程中有些问题比较难解决,协议可以在正常模式下复制过去,但是协议的添加则需要手动才行,我想改为有批处理完成。还有就是有些RPL启动文件如netui0.dll等在正常模式下是无法复制到系统目录中的,只有在DOS或安全模式下才行,所以产生了判断安全模式的问题。
|
|
2006-12-30 04:02 |
|
|
NaturalJ0
银牌会员
积分 1181
发帖 533
注册 2006-8-14
状态 离线
|
『第
15 楼』:
用楼主提到的 GetSystemMetrics 做了个 EXE ,楼主试试,如果能用的话,你就当是第三方工具吧。
附件
1: SM_CLEANBOOT.zip (2006-12-30 05:22, 1.58 K, 下载附件所需积分 1 点
,下载次数: 21)
|
|
2006-12-30 05:22 |
|