RunOnce阶段执行脚本时cURL无法解析主机的问题求助
看起来你的脚本手动运行完全正常,但放到HKEY_LOCAL_MACHINE下的RunOnce里就出现DNS解析失败,这大概率是系统启动阶段网络服务还未完全就绪导致的——HKLM路径下的RunOnce会在系统启动早期、用户登录过程中甚至登录前执行,这时候系统的网络栈可能还没完成初始化,curl自然没法正常解析域名。
给你几个实用的解决思路:
等待网络就绪后再执行curl
在脚本里加一段循环检测网络的逻辑,比如ping一个可靠的公共DNS服务器(比如8.8.8.8),直到能连通再继续执行下载。示例代码::WAIT_FOR_NETWORK rem 尝试ping谷歌DNS,成功就退出循环 ping -n 1 8.8.8.8 >nul if %errorlevel% neq 0 ( rem 失败的话等待5秒再重试 timeout /t 5 /nobreak >nul goto WAIT_FOR_NETWORK )把这段代码放在你的curl命令之前,脚本就会自动等网络可用后再执行下载。
切换到用户级RunOnce
如果你的脚本不需要系统级权限,把注册表项移到HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce试试。这个位置的脚本会在用户完全登录后执行,此时网络通常已经完全就绪了。排查环境变量与路径问题
虽然你的错误是DNS解析,但RunOnce的环境变量PATH可能和普通控制台不一样,建议把curl.exe换成绝对路径(比如C:\Windows\System32\curl.exe,如果curl在系统目录的话),排除找不到可执行文件的潜在问题。用IP地址验证DNS问题
先手动pingunsplash.com拿到它的IP地址,然后把curl命令里的域名换成这个IP(比如http://146.75.106.208/photos/rHfsPolwIgk/download?xxx),如果这样能成功,就百分百确认是DNS解析的问题,那等待网络的方案就最适合你。
另外,你可以在脚本里加调试日志,比如执行curl前先ping一下目标域名并记录结果:
ping unsplash.com >> runonce_debug.log
开机后查看runonce_debug.log,就能更清楚地看到当时的网络状态了。
备注:内容来源于stack exchange,提问作者qloq

