我有一个第三方进程外COM服务器和一个试图激活它的客户端程序。我创建了两个:在C#和C ++上。 当我使用Ctrl-F5(在提升模式下启动)从VS2010启动我的客户端程序(其中任何一个)时,客户端无法激活COM服务器。我收到“Class not registered”错误。 当我从命令行/ windows explorer启动客户端时,客户端成功激活了COM服务器。
所以我有一个exe-module工作(激活COM服务器)在一种情况下工作(不活动COM服务器)在另一种情况下。后一种情况是从VS2010运行模块(不是在调试中,只是通过Ctrl-F5)。
这让我觉得在vs2010启动时模块的权限存在一些问题会继承其权限。
在processprivileges.codeplex.com的帮助下,我获得了两组权限:
它不起作用的情况:
IncreaseQuota =>残疾人
安全性=>残疾人
TakeOwnership =>残疾人
LoadDriver =>残疾人
SystemProfile =>残疾人
SystemTime =>残疾人
ProfileSingleProcess =>残疾人
IncreaseBasePriority =>残疾人
CreatePageFile =>残疾人
备份=>残疾人
恢复=>残疾人
关机=>残疾人
Debug =>启用
SystemEnvironment =>残疾人
ChangeNotify =>启用
RemoteShutdown =>残疾人
Undock =>残疾人
ManageVolume =>残疾人
Impersonate =>启用
CreateGlobal =>启用
IncreaseWorkingSet =>残疾人
TimeZone =>残疾人
CreateSymbolicLink =>禁用
这'当它工作时:
关机=>残疾人
ChangeNotify =>启用
Undock =>残疾人
IncreaseWorkingSet =>残疾人
TimeZone =>禁用
我看不到任何与COM激活相关的可疑权限。但我没有看到任何其他原因。
为什么在一种情况下成功激活进程外COM服务器而在另一种情况下未激活?
答案 0 :(得分:1)
“未注册的类”是注册表问题。注意64位版本Windows上的平台目标设置。使用SysInternals的ProcMon来检查找到注册表项时遇到问题的原因。你可以比较一个“好”和“坏”的痕迹,这样可以帮助挖掘大量的数据。 CLSID注册表项是重要的。