对远程机器的调用命令导致 COMException (0x80040154)
Invoke-Command to remote machine leads to COMException (0x80040154)
我有一个使用 COM 的 C#.NET 应用程序。
当我在本地 (machine1) 调用应用程序时,COM 对象按应有的方式创建。
当我使用
从另一台机器 (machine2) 远程启动应用程序时
Invoke-Command -Session $session -ScriptBlock {path\theapp.exe}
应用程序启动(当然是在 machine1 上)但无法绑定 COM 对象:
System.Runtime.InteropServices.COMException (0x80040154): Retrieving the COM class factory for component with CLSID {C4DBE1C1-0608-48DF-AD9D-F34284FE7040} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
at System.Activator.CreateInstance(Type type, Boolean nonPublic)
at System.Activator.CreateInstance(Type type)
我不明白这是怎么可能的 -- 因为如果在本地开始执行,COM 连接就可以工作,为什么运行时稍后会发现 class 没有注册?
感谢任何提示和指点!
问题已解决。
原因是 (1) debug/release 版本的组件不匹配,以及 (2) 另一个组件不是 运行 它应该有的服务。
感谢阅读和发帖!
我有一个使用 COM 的 C#.NET 应用程序。
当我在本地 (machine1) 调用应用程序时,COM 对象按应有的方式创建。
当我使用
从另一台机器 (machine2) 远程启动应用程序时Invoke-Command -Session $session -ScriptBlock {path\theapp.exe}
应用程序启动(当然是在 machine1 上)但无法绑定 COM 对象:
System.Runtime.InteropServices.COMException (0x80040154): Retrieving the COM class factory for component with CLSID {C4DBE1C1-0608-48DF-AD9D-F34284FE7040} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
at System.Activator.CreateInstance(Type type, Boolean nonPublic)
at System.Activator.CreateInstance(Type type)
我不明白这是怎么可能的 -- 因为如果在本地开始执行,COM 连接就可以工作,为什么运行时稍后会发现 class 没有注册?
感谢任何提示和指点!
问题已解决。
原因是 (1) debug/release 版本的组件不匹配,以及 (2) 另一个组件不是 运行 它应该有的服务。
感谢阅读和发帖!