LOCAL SYSTEM权限下静默运行InstallShield安装程序时进程挂起
我们的产品以LOCAL SYSTEM服务身份在Windows上运行,负责部署扫描仪驱动包,近期某客户反馈特定InstallShield驱动安装包仅在LOCAL SYSTEM身份下挂起,本地管理员运行正常。经排查,Setup.exe在调用子进程前陷入对RpcSs服务的互斥体等待,挂起前查询了Windows.Storage.dll对应的CLSID {75847177-F077-4171-BD2C-A6BB2164FBD0} 的InProcServer,而正常场景不会触发该操作。以下是针对性的分析思路:
COM权限配置异常
LOCAL SYSTEM默认拥有足够的COM组件访问权限,但客户可能通过组策略、第三方工具修改了特定CLSID的权限配置。需对比客户环境与正常环境中HKCR\WOW6432Node\CLSID\{75847177-F077-4171-BD2C-A6BB2164FBD0}\Permissions的设置,同时通过dcomcnfg查看该COM组件的权限分配,确认LOCAL SYSTEM是否被限制访问。Windows.Storage.dll损坏或版本不兼容
挂起前查询的CLSID对应Windows.Storage.dll的InProcServer,若客户环境中该DLL文件损坏、版本与InstallShield程序不匹配(如系统补丁未更新、第三方软件篡改),会导致LOCAL SYSTEM身份加载时触发异常等待。可通过对比文件哈希、版本号验证,或执行sfc /scannow修复系统文件后重新测试。RpcSs服务状态或配置异常
虽然RpcSs服务显示运行,但依赖的DCOM Server Process Launcher、RPC Endpoint Mapper服务可能存在异常,或RpcSs的注册表配置(HKLM\SOFTWARE\Microsoft\Rpc)被篡改,导致LOCAL SYSTEM身份下的RPC调用无法正常处理。需检查依赖服务状态、对比注册表配置,必要时重启RpcSs服务(注意:可能影响系统正常运行,需提前告知客户)后测试。第三方安全软件拦截
客户环境的杀毒、EDR等安全软件可能对LOCAL SYSTEM身份下的COM调用、驱动安装做了特殊拦截,导致Setup.exe的RPC调用被阻塞。可临时禁用安全软件后测试,同时查看安全软件日志是否有相关拦截记录。LOCAL SYSTEM环境变量差异
LOCAL SYSTEM的环境变量(如PATH、TEMP)与普通用户存在差异,若InstallShield程序依赖的环境变量缺失或异常,会导致初始化COM组件时出错。可在模拟LOCAL SYSTEM的cmd中,用set命令导出环境变量,与正常用户对比,手动补全缺失变量后重新运行安装命令测试。系统组策略限制
客户环境的组策略可能限制了LOCAL SYSTEM的操作权限,比如禁止加载特定COM组件、限制RPC调用。需检查gpedit.msc中“计算机配置>Windows设置>安全设置>本地策略”下的用户权限分配、软件限制策略等项,对比正常环境的组配置。
内容的提问来源于stack exchange,提问作者SteveSims

