我的主板用了快十年了,终于坏了,所以我买了一个二手系统。我把旧硬盘和声卡装到新系统中,并连接了旧键盘和鼠标(其余组件——CPU、RAM、主板、显卡——都来自新系统)。
我事先就知道让 Windows 启动并安装新硬件的驱动程序会很困难(尤其是因为基础组件都是新的),但我完全无法尝试安装显卡等设备的驱动程序,因为键盘和鼠标无法工作(它们做可以在 BIOS 屏幕、DOS 模式、Windows 7、XP 的启动菜单等中工作,但不能在 Windows XP 本身中工作。
每当我尝试启动 XP(在正常或安全模式下)时,都会弹出一堆提示检测到所有新硬件的气球,以及发现新硬件向导对于处理器(显然它必须安装最低级组件的驱动程序)。不幸的是,我无法单击下一步,因为键盘和鼠标还不能工作,因为主板驱动程序(用于 PS/2 或 USB 端口)尚未安装。我甚至尝试了串行鼠标,但无济于事——同样,它在 DOS、7 等系统中可以工作,但在 XP 中不行,因为它没有安装串行端口驱动程序。
我尝试在 Windows 7 下安装 SOFTWARE 和 SYSTEM 配置单元,以便手动将“未签名驱动程序警告”设置为忽略(使用我找到的两个驱动程序签名策略设置)。这没有用;我仍然得到向导。
它们甚至不是花哨的、专有的、第三方的或未签名的驱动程序。它们是 Windows 自带的驱动程序 — CPU、RAM、IDE 控制器等驱动程序往往都是如此。键盘和鼠标驱动程序是通用的(但就像我说的,这些驱动程序无关紧要,因为它们所连接的端口的驱动程序尚未安装)。
显然,在过去几年的某个时间点,设置发生了变化,使得 Windows 在检测到新硬件时总是会提示我。(它还配置为在异常关机时显示关机事件跟踪器,所以我不得不关闭它,这样我才能看到桌面。)
哦,我尝试删除所有 PNF 文件以便重新生成它们,但这也无济于事。
有人知道我该如何重置 Windows,至少尝试自动安装新硬件的驱动程序,然后再提示我是否安装失败?相反,有人知道如何关闭自动驱动程序安装(并使用向导提示)吗?
多谢。
只是为了清楚因为它很可能会出现在答案中,否则,我不是在谈论下面的对话,而是在谈论下面的对话。
哦,为了在发生以下情况之前阻止任何建议,使用设备管理器来禁用、卸载、修复等任何设备是不可能的,因为如果键盘和鼠标(或任何其他输入设备)没有安装/工作,那么我究竟如何执行像使用设备管理器这样的操作?
答案1
周五,我终于在新旧系统上成功运行了 Windows XP!太棒了!(只花了 5 个半月的时间。)
我会说明修复此问题所需的具体步骤,以防其他人遇到类似问题,但不幸的是,由于越来越沮丧和不耐烦,我最终采取了一种有点焦土的做法,一次执行多个步骤。不过,我确实保留了我使用的工作文件,并找出了我所做的更改,所以我将列出几件可以尝试的事情,这些事情会有所帮助,或者至少应该有所帮助。
(显然,这是为高级用户准备的高级内容;但即使是高级用户也可能把这搞得一团糟,因此需要进行初始备份步骤。)
问题概述如下:将包含现有 Windows 安装的硬盘放入新系统,Windows 不会自动安装硬件驱动程序,并提示用户安装未签名的驱动程序,即使这些驱动程序是经过签名的。应该需要签名。此外,由于 Windows 尚未安装键盘或鼠标(或其他输入设备)的驱动程序,因此用户无法接受对话框。
以下是最新版本:
- 备份注册表配置单元。
- 禁用所有可以禁用的程序、驱动程序和服务。
- 设置一些东西(比如任务栏),以便您可以看到所有内容(不要隐藏任何信息)。
- 让 .BAT 文件自动运行,以便轻松进行更改和执行在线(操作系统内)任务。
- 使用宏/脚本应用程序来自动执行按键和按钮单击,因为您自己无法完成这些操作。
- 确保所有系统文件都存在。
- 手动删除有问题和不再存在的硬件。
:
启动(纯)DOS 或其他操作系统,并将注册表配置单元备份到另一个位置。这
%systemroot%\System32\CONFIG\*
包括%userprofile%\NTUSER.DAT
确保 BOOT.INI 和
SystemBootDevice
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet00*\Control] 中的驱动器/分区设置正确,因为您的系统驱动器现在可能位于与以前不同的驱动器/分区上(在我的情况下,(r)disk 曾经是 0,但由于新的驱动器现在为 1)。
:
安装适当的注册表配置单元并禁用所有无关的自动运行程序,特别是那些弹出窗口和遮挡视线的东西,因为您将无法最小化它们或单击前面的其他窗口/对话框(您必须简化解决此类问题的方法)。您不必删除自动运行条目,而是可以禁用它们,这样当您运行 Windows 并想要再次自动运行它们时,它们仍然存在(尤其是对于具有一堆命令行参数的条目):
对于
Run
键,您只需在命令开头添加一个#
字符或其他内容即可。这样,Windows 将无法运行它,因为它不是有效文件并将忽略它。安装 SYSTEM 配置单元并将
start
任何无关的驱动程序和服务(尤其是不再存在的硬件)的参数设置为禁用(dword:4)。禁用页面碎片整理等,在
BootExecute
...\Control\Session Manager 中,通过#
在命令开头添加一个(尽管不要管它autocheck
,因为如果您最终需要通过重置按钮重新启动,您将需要检查/修复驱动器)。不要删除
Startup
文件夹中的任何快捷方式,只需将它们移动到其他位置即可。
通过安装 SOFTWARE 和 NTUSER 注册表配置单元并设置
\Software\Microsoft\Driver Signing
并将其设置\Software\Microsoft\Non-Driver Signing
为 BIN:00,将 Windows 设置为安装驱动程序而不管驱动程序签名如何。
:
:
安装 SOFTWARE 配置单元并添加自动运行条目以在启动时运行 .BAT 文件(毫无理由,我将我的文件命名为
C:\t\j.BAT
)。现在,您可以轻松地让 Windows 执行操作而无需任何直接输入。当然,它需要重新启动到另一个操作系统、修改批处理文件并再次启动 Windows 才能进行更改,但这比在 Windows 中无法执行任何操作要好。;-)
(您可以注释掉某些内容,而不仅仅是删除它们。)在批处理文件末尾添加命令以重新启动 Windows,例如shutdown -t 10 -r
。不要忘记这一点,否则您最终将不得不按下重置按钮!在批处理文件(例如
j.bat
)中,执行某些操作,例如导入任何 .REG 文件(您可以在其他操作系统中离线编辑这些文件,就像使用批处理文件一样)。让批处理文件运行设备管理器并最大化窗口(使用以下工具尼科姆)以便查看硬件的当前状态。(尝试使用命令行工具,如问答将分辨率设置为视频驱动程序(此时可能是通用 VGA 适配器)可以达到的最大分辨率,例如 1024x768。您还可以重新注册 .DLL 文件来修复一些问题,尤其是与 Windows 更新相关的问题。你不希望批处理文件快速而疯狂地运行,因此你需要一个命令行工具,它可以暂停给定的秒数,以便暂停脚本执行——不,这个
pause
命令不好,因为它需要按下一个键才能继续。(我用了一个我几年前写的程序,但互联网上有很多,或者只是使用一个常见黑客。
:
- 获取宏记录器/脚本应用程序,例如热键大师,微机控制,宏制造商,自动热键,自动!等,并将其配置为执行您需要的任何键盘或鼠标操作(这样,您可以在 Windows 中“做”事情,而实际上没有任何可用的输入设备)。您需要将其配置为按标题和/或类和/或控件检测某些窗口或对话框,并相应地执行某些鼠标单击或按键。例如,您可以让它自动检测驱动程序确认对话框并触发单击或按钮
Next
。Continue
(确保将宏应用程序设置为在启动时运行而不是在 .BAT 文件中运行,以确保它们在 Windows 检测到硬件并开始提示驱动程序时运行;或者,使用命令让它们在批处理文件的开头运行,start
以避免批处理文件被阻止,因为它们不会退出。)
- 获取宏记录器/脚本应用程序,例如热键大师,微机控制,宏制造商,自动热键,自动!等,并将其配置为执行您需要的任何键盘或鼠标操作(这样,您可以在 Windows 中“做”事情,而实际上没有任何可用的输入设备)。您需要将其配置为按标题和/或类和/或控件检测某些窗口或对话框,并相应地执行某些鼠标单击或按键。例如,您可以让它自动检测驱动程序确认对话框并触发单击或按钮
:
确保所有必需的系统文件都已就绪。运行(通过批处理文件)
sfc /scannow
。确保驱动器中有 Windows 光盘 — 假设 Windows 已安装 CD/DVD 驱动程序。您还可以尝试在离线时手动复制任何丢失的文件。例如,我从上次 XP 备份中复制了所有文件,指定不是覆盖现有的文件。这样,所有丢失的文件都已恢复(特别是在以下目录中:- 计算机目录:\Windows
- 目录:\Windows\INF
- C:\Windows\驱动程序缓存
- C:\Windows\ServicePack文件
- 目录:\Windows\System32
- 目录:\Windows\System32\dllcache
C:\Windows\System32\驱动程序
(不久之后,它终于开始再次工作了,我也碰巧恢复了以下与硬件安装无关的目录。巧合吗?我不知道。)
- C:\Windows\Assembly
- 目录:\Windows\Microsoft.NET
- 目录:\Windows\WinSxS
- C:\Windows\帮助
目录:\Windows\System32\WBEM
(您可能实际上想要删除或重命名 C:\Windows\System32\CatRoot*)
:
删除 C:\Windows\INF 中的所有 .PNF 文件。Windows 将在下次需要安装驱动程序时(此时每次启动时仍是如此)从现有的 .INF 文件重建它们。这类似于在页面无法正确显示时清除浏览器缓存,以确保您获取并使用最新的文件副本。
作为最后的手段,得到并使用 Microsoft 工具
DEVCON
删除某些设备,以便 Windows 可以尝试从头开始安装硬件。但是,首先,您需要运行命令(通过批处理文件)DEVCON findall * > C:\t\devcon.log
来转储所有硬件及其相应 ID 的列表。这样,您就可以编译一份合适的自定义列表,列出要删除的硬件。需要删除的设备包括以下内容:- “*ACPI*”
- “USB\ROOT_HUB*”
- “SERENUM\MOUSE*”
- “VEN_8086“
- “HID*”
- “*TUNMP*”
- “PCI_VEN_1102*”
- “PCI_VEN_1033*”
- “PCI_VEN_1011*”
- “PCI_VEN_1186*”
- “PCI_VEN_11AB*”
- “PCI_VEN_1274*”
“PCI\VEN_5333*”
(这些是主要的、与主板相关的设备,例如处理器、端口、总线、输入设备、网卡、硬盘和光驱。)
正如你所见,它(毫不奇怪)是一个巨大的如果你将系统驱动器插入新系统(即主板),并希望避免重新安装,那么让 Windows 再次运行将非常困难。没有输入方法会非常困难,但不是不可能。这需要大量的时间、精力、耐心、工具、对细节的关注和谨慎,但它是可能的,并且回报(推迟完全重新安装,从而失去谁知道随着时间的推移所做的数千个定制)是值得的。
幸运的是,我终于设法让它工作了,因为我还没有准备好重新安装。现在我不仅可以再次使用 Outlook Express(并下载和清除我帐户中堆积的大约 5,000 封电子邮件),还可以在安装的旧版 VS2003 中再次进行一些编程。(并不是说我不习惯 Windows 7;事实上,有一段时间,我回到 XP 时感觉很奇怪,但我又有宾至如归的感觉,就像搬进宿舍住了一年,然后又搬回了家里的卧室。)
答案2
我将从这里分享我的答案,脚本在 MSFN 网站上正确显示:http://www.msfn.org/board/topic/49514-disable-found-new-hardware-wizard/?do=findComment&comment=1132792
我制作了一个 AutoIt3 脚本https://www.autoitscript.com/site/autoit/downloads/所有新硬件向导窗口将继续接受未签名的驱动程序,取消 WinXP CD 提示并跳过多个选项(连接到互联网等),以便检测和安装鼠标和键盘。编译后的自动脚本 EXE 应复制到“开始”(在“开始菜单”内)文件夹以自动执行。脚本字符串必须适应本地 Windows 语言。可能还有一些 Alt-LETTER 组合。我的示例在西班牙语 WinXP 中有效。希望它能帮助其他人,在鼠标和键盘正常工作后,必须删除脚本(或将其移动到其他文件夹):
$asistente= "Asistente para hardware nuevo encontrado" ;"Found New Hardware Wizard"
$instalacion= "Instalación de hardware"
$archivos= "Archivos necesarios"
$cambio= "Cambio de configuración del sistema"
while 1
sleep(200)
if WinExists( $cambio) then
WinActivate( $cambio)
sleep(200)
Send("!n") ; (press Alt-n)
endif
if WinExists( $instalacion) then
WinActivate( $instalacion)
sleep(200)
$text=WinGetText( $instalacion)
if StringInStr( $text, "El software que está instalando para este hardware") then ;"The software..."
Send("!c")
endIf
; MsgBox($MB_OK, "Autoit Status", $text & stringinstr( $text, "está"), 2 ) ; sleep(2000)
endif
if WinExists($archivos) then
WinActivate($archivos)
sleep(200)
$text=WinGetText( $archivos)
if StringInStr( $text, "Se necesita el archivo") then
ControlClick( "Archivos necesarios", "", "[ID:2]" )
endIf
endif
if WinExists( $asistente) then
WinActivate( $asistente)
sleep( 200)
$text=WinGetText( $asistente)
if StringInStr( $text, "Desea que Windows se conecte a Windows Update") then ;"Can Windows connect to Windows Update to search for software?"
; ControlCommand( $asistente, "", "[ID:8104]", "Check", "")
sleep(150)
; ControlClick( $asistente, "", "[ID:12324]")
Send("!n")
sleep(100)
Send("!t")
sleep(250)
endif
$text=WinGetText( $asistente)
if StringInStr( $text, "Este asistente le ayudará a instalar software para:") then ;"This wizard"
sleep(150)
Send("!t")
sleep(250)
endif
$text=WinGetText( $asistente)
if StringInStr( $text, "No se puede instalar este hardware") then ;"Cannot Install this Hardware"
ControlCommand( $asistente, "", "[ID:1030]", "UnCheck", "")
sleep(200)
;ControlClick( $asistente, "", "[ID:12325]")
Send("{ENTER}")
sleep(200)
endif
$text=WinGetText( $asistente)
if StringInStr( $text, "desea que haga el asistente?") then ;"What do you want the wizard to do?"
ControlCommand( $asistente, "", "[ID:1049]", "Check", "")
sleep(200)
ControlClick( $asistente, "", "[ID:12324]")
sleep(200)
endif
$text=WinGetText( $asistente)
if StringInStr( $text, "Se recomienda que se conecte a Internet para que el asistente") then
ControlCommand( $asistente, "", "[ID:1065]", "Check", "")
sleep(200)
ControlClick( $asistente, "", "[ID:12324]")
sleep(200)
endif
$text=WinGetText( $asistente)
if StringInStr( $text, "Finalizar para cerrar") then ;"Click Finish to close the wizard."
ControlClick( $asistente, "", "[ID:12325]")
sleep(250)
endif
endif
wend
答案3
仅当系统驱动程序路径中没有匹配的驱动程序时,才会弹出该向导。根据技术网,您必须离线修改 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\DevicePath 以添加包含驱动程序 infs 的文件夹,以便在弹出向导之前自动搜索它们。
如果这不起作用,则重新安装所有集成的驱动程序可能会更简单。
答案4
好吧,我遇到了同样的问题,并在一个多小时内解决了它。我使用了带有 sp3 cd 的 XPpro,然后在现有程序之上重写了 windows xp。现在我所有的旧程序都运行正常。