最近遇到一个挺绕的问题:一台 Redmi Book,本来系统自带小米电脑管家,后来软件打不开了。卸载后去官网重新下载最新版安装包,结果安装包也装不上。
一开始很容易怀疑是系统环境、代理、残留服务、安装包损坏。但最后排查下来,问题不在主安装程序,而在官网这个"小米电脑管家下载器"的启动初始化逻辑。
现象
环境大概是:
text
设备:Redmi Book Pro 14 2024
系统:Windows 11
安装包:XiaomiSetup / 小米电脑管家下载器 4.5.0.2025
安装包能正常双击,但很快闪退,或者表现为没有任何安装界面。
先确认安装包本身:
powershell
Get-AuthenticodeSignature "D:\Downloads\XiaomiSetup.exe"
(Get-Item "D:\Downloads\XiaomiSetup.exe").VersionInfo
结果显示签名有效,签发方是小米,版本也是官网新版。所以安装包不是被篡改,也不是下载损坏。
先看事件日志
真正有价值的信息在事件查看器里。
可以用 PowerShell 查最近的应用错误:
powershell
$since = (Get-Date).AddMinutes(-30)
Get-WinEvent -FilterHashtable @{
LogName = 'Application'
StartTime = $since
} | Where-Object {
$_.Message -match 'XiaomiSetup|System.Net|HttpRequestException'
} | Select-Object TimeCreated, ProviderName, Id, Message
日志里出现了关键栈:
text
应用程序: XiaomiSetup.exe
异常信息: System.Net.Http.HttpRequestException
在 XiaomiSetup.EventUpload.GetDeviceId()
在 XiaomiSetup.EventUpload.initInstanceId()
在 XiaomiSetup.MainWindow..ctor()
这说明它不是安装阶段失败,而是窗口初始化阶段就崩了。
换句话说:安装界面还没真正打开,它就先跑了某个联网初始化逻辑,然后失败闪退。
一开始怀疑代理
当时机器上开过 Clash,系统代理是:
text
127.0.0.1:7890
查看方式:
powershell
Get-ItemProperty `
-Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings' |
Select-Object ProxyEnable, ProxyServer, AutoConfigURL
netsh winhttp show proxy
关闭代理后再次安装,问题仍然存在。新的日志还是指向:
text
XiaomiSetup.EventUpload.GetDeviceId()
所以代理可能是诱因,但不是唯一根因。
进一步分析下载器
后来把官网安装包拆开看了一下,发现它本质上是一个外层自解压程序,里面包含一个 XiaomiSetup.cab,CAB 里才是实际的 .NET/WPF 下载器主体。
反编译后看到关键逻辑:
csharp
public static void initInstanceId()
{
if (ReadValue("CONFIG_KEY_INSTANCE_ID").Length <= 0)
{
SaveValue("CONFIG_KEY_INSTANCE_ID", Guid.NewGuid().ToString().ToUpper());
}
if (ReadValue("CONFIG_KEY_AES_FOR_UPLOAD").Length <= 0 ||
ReadValue("CONFIG_KEY_SID").Length <= 0)
{
GetDeviceId();
return;
}
}
而 GetDeviceId() 里会访问:
text
http://tracking.miui.com/track/key_get
它的目的不是下载小米电脑管家,而是获取埋点上传用的 sid 和 AES key。
问题在于:这个请求失败后,外层没有做好异常兜底,导致整个安装器直接崩溃。
根因
当前用户注册表下有这个路径:
text
HKCU\Software\MI\XiaomiSetup
当时里面只有:
text
CONFIG_KEY_INSTANCE_ID
但缺少:
text
CONFIG_KEY_AES_FOR_UPLOAD
CONFIG_KEY_SID
所以安装器每次启动都会强制请求:
text
http://tracking.miui.com/track/key_get
一旦这个接口因为网络、代理、服务端策略、HTTP 状态码等原因失败,安装器就会在初始化界面之前闪退。
这就是整个问题的核心。
解决办法
临时 workaround 是:给当前用户注册表补上两个埋点相关占位值,让下载器跳过这个会崩溃的初始化请求。
powershell
$key = 'HKCU:\Software\MI\XiaomiSetup'
New-Item -Path $key -Force | Out-Null
Set-ItemProperty `
-Path $key `
-Name 'CONFIG_KEY_INSTANCE_ID' `
-Value ([guid]::NewGuid().ToString().ToUpper()) `
-Type String
Set-ItemProperty `
-Path $key `
-Name 'CONFIG_KEY_AES_FOR_UPLOAD' `
-Value 'AQIDBAUGBwgJCgsMDQ4PEA==' `
-Type String
Set-ItemProperty `
-Path $key `
-Name 'CONFIG_KEY_SID' `
-Value 'local-bypass-sid' `
-Type String
然后重新运行安装器。
之后下载器成功启动,开始下载真正的小米电脑管家安装包:
text
XiaomiPCManager_os3_tv_5.5.2.10
最终安装完成,卸载列表里出现:
text
小米电脑管家 5.5.2.10
MiService 4.1.1.188
主程序路径:
text
C:\Program Files\MI\XiaomiPCManager\5.5.2.10\XiaomiPcManager.exe
注意事项
这个方法没有修改安装包,也没有绕过主程序的安装逻辑,只是绕过了下载器启动时的埋点 key 获取失败问题。
但它毕竟是一个 workaround,建议注意:
- 修改前最好导出注册表备份。
- 这个键在
HKCU下,只影响当前用户。 - 如果后续小米修复了下载器,可以删除该键让它重新生成。
- 不建议随便清理小米服务和驱动残留,尤其是笔记本厂商工具通常会关联热键、电源、互联等功能。
总结
这次问题最容易误判成:
text
安装包坏了
系统环境坏了
电脑型号不支持
卸载残留导致重装失败
代理导致下载失败
但实际根因是:
text
小米电脑管家下载器启动时访问 tracking.miui.com/track/key_get 获取埋点 sid/key,
请求失败后异常没有被捕获,导致 XiaomiSetup.exe 在界面初始化阶段直接闪退。
主安装包本身是可以正常安装的。真正坏掉的是下载器的异常处理。