2

我有一个第 3 方进程外 COM 服务器和一个试图激活它的客户端程序。我创建了两个:在 C# 和 C++ 上。当我使用 Ctrl-F5(以提升模式启动)从 VS2010 启动我的客户端程序(其中任何一个)时,客户端无法激活 COM 服务器。我收到“类未注册”错误。当我从命令行/Windows 资源管理器启动客户端时,客户端成功地执行了活动 COM 服务器。

所以我有一个 exe 模块,它在一种情况下工作(激活 COM 服务器),而在另一种情况下不工作(不活动 COM 服务器)。后一种情况是从 VS2010 运行模块时(不在调试中,仅通过 Ctrl-F5)。

这使我认为权限存在一些问题,因为模块在由 vs2010 启动时会继承其权限。

在 processprivileges.codeplex.com 的帮助下,我获得了两组权限:它不起作用的情况:IncreaseQuota => Disabled
Security => Disabled
TakeOwnership => Disabled
LoadDriver => Disabled
SystemProfile => Disabled
SystemTime => Disabled
ProfileSingleProcess = > Disabled
increaseBasePriority => Disabled
CreatePageFile => Disabled
Backup => Disabled
Restore => Disabled
Shutdown => Disabled
Debug => Enabled
SystemEnvironment => Disabled
ChangeNotify => Enabled RemoteShutdown =
>已禁用
Undock = > Disabled
ManageVolume => Disabled
Impersonate => Enabled
CreateGlobal => Enabled
increaseWorkingSet => Disabled
TimeZone => Disabled
CreateSymbolicLink => Disabled

当它工作时: Shutdown => Disabled
ChangeNotify => Enabled
Undock => Disabled
increaseWorkingSet => Disabled
TimeZone => Disabled

我看不到任何与 COM 激活相关的可疑特权。但我没有看到任何其他原因。

为什么进程外 COM 服务器在一种情况下被成功激活,而在另一种情况下没有被激活?

4

1 回答 1

1

“类未注册”是一个注册表问题。注意 64 位版本的 Windows 上的平台目标设置。使用 SysInternals 的 ProcMon 检查查找注册表项时遇到问题的原因。你有一个可以比较的“好”和“坏”轨迹,这应该有助于挖掘大量数据。CLSID 注册表项是重要的一项。

于 2011-04-17T19:50:09.930 回答