如何授予对COM +应用程序的访问权限?

时间:2011-06-09 12:52:42

标签: windows com permissions com+

我创建了一个COM +服务器应用程序而调用者无法访问它 - 当它尝试从该应用程序实例化COM对象(CoCreateInstance())时,系统日志中会出现以下内容:

  

特定于应用程序的权限设置不会为具有CLSID {此处为COM对象的类ID}和APPID {此处为COM +应用程序的应用程序ID}的COM服务器应用程序授予用户MACHINENAME \ administrator SID(SID)的本地激活权限这里)来自地址LocalHost(使用LRPC)。可以使用组件服务管理工具修改此安全权限。

调整COM +访问的唯一方法似乎是使用roles,但应用程序已“未执行访问检查”,因此看起来应该没有限制。然而,该对象不会实例化。

如何允许某个用户访问特定的COM +应用程序,以便他可以从那里实例化对象?

1 个答案:

答案 0 :(得分:1)

您应该做的第一件事是检查是否可以在应用程序之外创建此对象。我在这里使用vbscript;

dim vvv
set vvv= CreateObject ("CoCreateInstance()")

if isnull(vvv) then
            msgbox "null"
else
            msgbox "not null"
end if

如果你不能创建对象,那么.dll可能存在问题,你可能最好只是从注册表中擦除组件并完全重新安装/重新实现它。

如果您可以创建对象,则访问该组件的应用程序存在问题。这通常是由于以下原因之一;

  1. 组件安全设置

    • 为了找到问题,您可以取消选中“强制执行访问检查”。确保取消选中应用程序(包)级别和组件级别的框。
  2. 用户设置

    • 查看此link。除了他们的建议,尝试添加IUSR_servername作为管理员的成员。
  3. 组件服务与注册表不匹配

    • 我们需要确保组件服务中的CLSID与注册表匹配。在组件服务中,查找组件(而不是应用程序)并查看属性。如果组件在那里,则定义注册。当你在这里时,我们不妨仔细检查一些设置。 DLL地址有效吗?安全性,交易和激活设置是否正确?好的,现在注意常规选项卡中的CLSID。进入注册表编辑器,在HKEY_CLASSES_ROOT中找到CLSID(它应该在那里)。确保DLL地址和ProgID正确无误。同时验证密钥和子密钥的结构与其他组件的结构类似。
  4. 如果这些都不起作用,请在注册表中搜索组件的名称并将其擦除。然后重新安装。