经常在使用win10中,会莫名的卡顿大概几秒钟,造成程序未响应或白屏,据观察,大概从1511版本左右开始引起的,这个问题困扰我很久,之前一直以为是电脑硬盘的性能问题,但是在更换了SSD之后还是会有发生;作为一个IT从业者,尝试从其中找到原因或者解决办法,最终这个问题再也没有发生过
错误显示
在这个错误中有几个点是可能不一样,但大致的解决思路和操作都是相同的,但具体什么原因引起的,不得而知
应用程序-特定 权限设置并未向在应用程序容器 不可用 SID (不可用)中运行的地址 LocalHost (使用 LRPC) 中的用户 NT AUTHORITY\LOCAL SERVICE SID (S-1-5-19)授予针对 CLSID 为
{6B3B8D23-FA8D-40B9-8DBD-B950333E2C52}
、APPID 为
{4839DDB7-58C2-48F5-8283-E1D1807D0D7D}
的 COM 服务器应用程序的 本地 激活 权限。此安全权限可以使用组件服务管理工具进行修改。
- LOCAL SERVICE可能是当前的用户(system、network service等),也可能是system用户,或者其他用户;是哪个账户没有权限,就添加哪个账户和自己的账户
- CLSID和APPID可能是其他别的
除了上面2个可能会不一样之外,其他10016的错误基本上都可以用这个方法解决
解决步骤
先改CLSID
按“win键”就是左下角那个菜单,直接搜索“RegEdit”
打开注册表,win10的话,直接粘贴 路径
计算机\HKEY_CLASSES_ROOT\CLSID\{6B3B8D23-FA8D-40B9-8DBD-B950333E2C52}
由于我已经添加了local service服务,所以在截图中会包含local service的显示,但是只要按照步骤操作即可
所有者的权限默认是“TrustedInstaller”,得把它设成自己,才能修改这个设置,一般在Windows里面所说的夺权就是指这里
在“3”那里填写自己当前的用户名,如果是使用微软在线账户登录的,点击“4”,在点击查找,找到自己的邮件账户
在这里填写local service
和自己的账户,中间用英文分号隔开
把local service
和自己的账户都勾选“完全控制”
再改APPID
计算机\HKEY_CLASSES_ROOT\APPID\{4839DDB7-58C2-48F5-8283-E1D1807D0D7D}
修改步骤同上
到这才完成了一半,得先有权限修改,才能继续后面的真正修改
修改“组件服务”
按win键,直接搜索“组件服务”
找到“ShellServiceHost”,右键属性;这里面会显示刚刚的“APPID”,然后点击“安全”,在“启动和激活权限”添加local service
和”自己的账户”的权限为Windows报错的要求“本地激活”权限
再点击“访问权限”,添加local service
和“自己的账户”为“本地访问”权限;
再往下点击“配置权限”,也添加local service
和“自己的账户”为“读取”权限
至此,如果操作无误的话,就完成了。
后记
10016的错误ID可能在1511-1809之间的版本经常出现,由于我还没有更新到1903,所以并不知道以后的情况;有时候提示是当前账户没有对一些CLSID和APPID有本地激活的权限,但操作的步骤都是一样的;
另外,一定要注意APPID的“RunAs”和“默认”的数据类型,修改组件服务的项目就是根据这个选定的;不同的APPID,对应不同的数据,在组件服务里面的名称是这个“数据类型”的权限修改;区别的办法就是打开“属性”后,里面显示的就是和刚刚查找的APPID一致,否则就不对,也没有权限;有时候“默认”的“数据”显示“(数据未设置)”,这个 时候就要查找“RunAs”里面的名称;有时候在组件服务里面会找到两个同名的,那就要看属性里面的APPID来区别正确的了。
类似的错误
修改的方法同上