32位DCOM应用程序“无法使用对象链接和嵌入”错误的终极修复指南
2024-03-04 18:45:51
在32位DCOM应用程序中修复“无法使用对象链接和嵌入”错误的终极指南
前言
在使用PowerShell脚本来为32位DCOM应用程序(例如Excel)配置用户标识时,你可能遇到“无法使用对象链接和嵌入”的令人沮丧的错误。即使已使用了微软Windows SDK的示例,该错误仍然存在。这篇文章将深入探讨导致此错误的原因并提供一个全面的解决方案。
错误原因
该错误通常源自注册表权限问题。当手动配置组件服务控制台时,Windows会自动授予当前用户对相关注册表项的访问权限。但是,通过脚本自动执行此过程时,此权限授予不会自动发生。
解决方案
为了解决此问题,我们需要在脚本中手动授予注册表权限。以下步骤将指导你完成这个过程:
-
修改PowerShell脚本:
修改你的PowerShell脚本以包含以下代码,授予对相关注册表项的访问权限:
# 授予对相关注册表项的访问权限 $RegistryKey = [Microsoft.Win32.RegistryKey]::OpenBaseKey( [Microsoft.Win32.RegistryHive]::LocalMachine, [Microsoft.Win32.RegistryView]::Registry64 ) $RegistryKey.OpenSubKey("SOFTWARE\\Classes\\Interface\\{00020400-0000-0000-C000-000000000046}")?.SetAccessControl( (New-Object System.Security.AccessControl.RegistrySecurity).SetAccessRule( [System.Security.AccessControl.RegistryAccessRule]::new( "NT AUTHORITY\\SYSTEM", "FullControl", [System.Security.AccessControl.InheritanceFlags]::None, [System.Security.AccessControl.PropagationFlags]::None, [System.Security.AccessControl.AccessControlType]::Allow ) ) ) $RegistryKey.OpenSubKey("SOFTWARE\\Classes\\Interface\\{00000101-0000-0000-C000-000000000046}")?.SetAccessControl( (New-Object System.Security.AccessControl.RegistrySecurity).SetAccessRule( [System.Security.AccessControl.RegistryAccessRule]::new( "NT AUTHORITY\\SYSTEM", "FullControl", [System.Security.AccessControl.InheritanceFlags]::None, [System.Security.AccessControl.PropagationFlags]::None, [System.Security.AccessControl.AccessControlType]::Allow ) ) ) $RegistryKey.Close()
-
运行修改后的脚本:
使用管理员权限运行修改后的PowerShell脚本。脚本将创建应用程序ID并配置用户标识。它还将授予对注册表项的完全控制权限,从而消除错误。
结论
通过在脚本中添加注册表权限,你可以有效地解决“无法使用对象链接和嵌入”错误,从而使32位DCOM应用程序正常运行。
常见问题解答
-
为什么需要管理员权限来运行脚本?
授予注册表权限需要管理员权限。 -
修改后的脚本适用于哪些32位DCOM应用程序?
该脚本适用于任何32位DCOM应用程序,例如Microsoft Office应用程序。 -
脚本中其他需要注意的事项是什么?
确保已正确设置RegPath,AppID,DomainUser和Password参数。 -
如果修改后的脚本仍然不能解决错误怎么办?
检查注册表权限是否正确设置,并确保没有其他进程干扰应用程序的运行。 -
在使用脚本时我需要了解的其他安全注意事项是什么?
谨慎使用注册表权限,仅授予必要的访问权限,并定期检查权限设置。