加入收藏 | 设为首页 | 会员中心 | 我要投稿 站长网 (https://www.0631zz.cn/)- 科技、云服务器、分布式云、容器、中间件!
当前位置: 首页 > 服务器 > 搭建环境 > Windows > 正文

Windows嵌入式开发环境搭建:站点配置与权限设置指南

发布时间:2026-11-10 14:33:38 所属栏目:Windows 来源:DaWei
导读:  V2EX风格,踩坑复盘,先扔结论后补细节,冷眼。  “Windows嵌入式开发环境搭建:站点配置与权限设置指南”——这标题能活到现在,不是因为写得对,是优胜劣汰筛下来的。剩下没被干掉的,要么是没人用,要么是用的人已经忘了自

  V2EX风格,踩坑复盘,先扔结论后补细节,冷眼。


  “Windows嵌入式开发环境搭建:站点配置与权限设置指南”——这标题能活到现在,不是因为写得对,是优胜劣汰筛下来的。剩下没被干掉的,要么是没人用,要么是用的人已经忘了自己当年配错IIS Application Pool Identity时,连Windows Service Control Manager日志都没敢打开第三层。


  那天在客户机房,空调坏了三天,墙皮返潮那股酸味混着UPS风扇嗡嗡声,我盯着那台Surface Pro 7(对,就它,还挂着防静电腕带)跑完第十七次netsh http add urlacl,突然意识到:ACL没加错,是SID映射根本没走Local Security Authority的缓存路径。但我不说破。张工蹲在机柜底下拧RJ45水晶头,手抖得像接线没剪齐;王总监在走廊打电话,“……不,我们不用Linux容器化,我们信COM+托管生命周期。”他挂了电话,顺手把半块没吃完的韭菜盒子塞进工位抽屉第二格——塑料盒底沾着两粒米,我数过,三十七秒没动过。


  配IIS站点?先别碰绑定。你得先确认那个“本地系统”账户到底算不算当前域里合法成员——尤其当你用的是Workgroup模式下硬套域策略的伪嵌入式镜像。我原以为只要svcctl stop w3svc再改注册表HKLM\\SYSTEM\\CurrentControlSet\\Services\\W3SVC\\Parameters\\MaxBandwidth就行,结果发现registry项压根没加载,Service Control Manager连启动都跳过参数解析,直接fallback到100MBps默认值。而这个值,在ARM64版Win10 IoT Enterprise LTSC 2021里,其实是写死在csrss.exe初始化阶段的全局变量里的,没法patch。我敢打包票。


  然后是NTFS权限链。你要给C:\\inetpub\\wwwroot\\site21\\bin\\Debug加Modify,但实际起效的是ApplicationPoolIdentity组对C:\\Windows\\System32\\inetsrv\\config\\applicationHost.config的Read权限。这两者之间隔着三层ACL继承中断、一次UAC虚拟化重定向,和一个永远不报错但会静默丢弃Write的FSRM策略。上次我让李工用icacls /reset递归重置,他敲完回车,窗外刚好打雷,服务器风扇转速瞬时上冲,监控里HTTP 503突刺持续十八秒,他没抬头,只是把咖啡杯往左挪了七厘米,避开键盘右上角那个漏液的键帽。


  你知道最荒谬的是什么?文档里写“建议禁用World Wide Web Publishing Service自带的日志轮转”,结果没人告诉你,一旦你真禁了,W3SVC进程在启动第五秒会自动创建C:\\inetpub\\logs\\LogFiles\\W3SVC1\\w3svc1.log,并且用SYSTEM账户持有句柄——而你的自定义日志脚本正试图用IIS_IUSRS去truncate它。这时候你看到的不是Access Denied,是ERROR_SHARING_VIOLATION,日志文件名后面跟着个(2),说明已有两个handle指向同个file object。这个我说不准是kernel对象引用计数bug还是IIS内部状态机没同步。反正重装IIS元数据库也解决不了,最后靠重启host process svchost.exe -k iissvcs -p才甩开它。但你不重启整机,就永远不知道svchost实例绑的是哪个AppID——注册表里HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\W3SVC\\Parameters\\AppHostConfigPath下面那串GUID,和%windir%\\System32\\inetsrv\\config\\administration.config里写的,从来不一样。


  说到GUI工具,Visual Studio Installer Projects插件生成的.msi包,在安装后会偷偷往HKCU\\Software\\Microsoft\\IIS Express\\AutoStart写1。可客户现场从来没人开IIS Express。没人。包括他们采购的那三台预装Win10 IoT Core的工业网关——全是x64架构,全禁了TLS 1.0协商,全开了Credential Guard,但没人关掉那个注册表项。结果部署脚本一执行,IIS Express自动启,监听127.0.0.1:8080,抢走端口,主服务bind失败,错误码0x80070020。排查花了四小时二十三分钟,期间运维老周接了个电话,说他闺女小升初摇号中了,语气平静,挂完把桌上泡面桶倒扣在显示器右侧,盖住了告警弹窗。


  还有个事:证书绑定。你用netsh http add sslcert ipport=0.0.0.0:443 certstorename=My certhash=... ——哈,certhash必须是SHA1十六进制小写无空格,但Win10 20H2之后的PowerShell Get-ChildItem Cert:\\LocalMachine\\My输出的hash是大写带冒号分隔的。手动删冒号?不,它会校验字节数,必须精确32字符。我试过用Replace("-", "")再ToLower(),结果导出.pfx再导入时触发ESENT数据库checksum不匹配。最后是用certutil -dump导出原始blob,hexedit里手动覆写——但这件事我没告诉任何人,包括我徒弟。他还在学怎么用mmc snap-in点出私钥导出选项,而那个勾选框,在WinPE环境下根本不可见。


文章配图,仅供参考

  优胜劣汰的意思就是:你活着不是因为你做对了,是你比隔壁项目组多熬了三个通宵,比竞争对手少换两次Windows ADK版本,比自己去年少信一句“微软已修复”。至于现在要不要再试一次applicationHost.config的schema validation bypass?我懒得开了。电脑右下角时间跳到2025年6月11日16:47:32,我正等一个远程桌面连接响应,对方那边没声儿,只传来隐约的键盘敲击节奏,像是有人在用Caps Lock切换大小写写批处理。


  要不你先去查查Event ID 5189,Filtering Platform Connection日志里有没有异常源地址。没有的话,再来找我。

(编辑:站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!