【问题标题】:The operation could not be completed. ClassFactory cannot supply requested class操作无法完成。 ClassFactory 无法提供请求的类
【发布时间】:2013-04-11 14:29:34
【问题描述】:

在 Visual Studio 2008 中,突然间,当我尝试将现有项目添加到项目时,我收到了以下错误:

操作无法完成。 ClassFactory 无法提供请求的类

由于我昨天安装了 VS 2010 Beta 2,我刚刚将系统还原到该点之前,看看是否是这个原因。不是。

我想我知道是什么原因造成的,但我不知道如何解决。我认为这是由于试图修复另一个 Visual Studio 问题造成的,如该线程中所述:

AnswerEvent log error 4201 - ERROR WMI INSTANCE NOT FOUND

我运行了帖子中描述的漫长过程,从“好的女士们先生们,这就是我们发现的内容;”开始。它解决了我遇到的服务器资源管理器无法正常工作的问题,但我认为这可能是由于权限问题导致我当前的问题。

如果是这样,有人知道我需要修复什么权限吗?有什么办法可以查到吗?或者你对我能做些什么来解决这个问题有任何其他想法吗? (我还没有尝试过修复安装,因为我希望能找到一个不会花那么长时间的解决方案。)

【问题讨论】:

    标签: visual-studio visual-studio-2008


    【解决方案1】:

    启用 devenv.exe 兼容性设置上的“禁用视觉主题”复选框会导致此问题。

    见:http://connect.microsoft.com/VisualStudio/feedback/details/532500/visual-studio-responses-with-classfactory-cannot-supply-requested-class

    这很不幸,因为 Visual Studio 2008 UI 在禁用视觉主题的情况下明显响应更快。

    【讨论】:

      【解决方案2】:

      使用来自these SysInternals tools 的 Process Explorer,您可以查看应用程序尝试访问的文件和注册表设置,并过滤失败的尝试。起初它包含大量信息,但它为您提供了应用程序尝试执行的所有操作的完整图片,您可以开始查看打开/读取文件/注册表设置的失败,以帮助确定问题的原因像这样。然后当然可以查看每个文件或注册表项的权限(是的,注册表项与文件一样具有权限,这可能会导致问题,因此请注意这一点)并放松权限以尝试解决问题。

      编辑: 您应该检查这些密钥的权限。请注意,您拥有不同用户/角色的权限。如果我同时属于管理员组和用户组,并且管理员组具有读取权限,但用户组具有读取权限的拒绝复选框,则拒绝实际上优先并且会阻止您的帐户访问注册表项。在程序尝试将值写入注册表项的情况下,“完全控制”权限的概念也相同。我认为失败中应该有一些东西表明它试图用密钥做什么。

      我在"HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{DC1C5A9C-E88A-4dde-A5A1-60F82A20AEF7}" 下也有它。在此之下,HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{DC1C5A9C-E88A-4dde-A5A1-60F82A20AEF7}\InProcServer32\ 的默认值为"%SystemRoot%\System32\comdlg32.dll"。这就是应用程序查找类的 dll 的方式。它通过 GUID 查找它,路径告诉它从哪个 DLL 加载类。因此,请确保列出的路径实际上具有该 DLL,并且该 DLL 文件也具有适当的权限。再次检查权限对话框中列出的所有组/角色,以确保拒绝列中没有一个复选框,并检查允许列以允许对您所属的至少一个角色进行读取访问。

      【讨论】:

      • 我如何“过滤失败的尝试”?
      • 啊,你一定是指进程监视器。
      • 在它失败的两个地方,公共线程似乎是有这个 GUID 的东西的问题:{DC1C5A9C-E88A-4DDE-A5A1-60F82A20AEF7}
      • 这可能是很多事情,但我会先在您的注册表中搜索 regedit 中的该 guid。
      • 我一找到它就这样做了;它位于 HKCR\CLSID、HKLM\SOFTWARE\Classes\CLSID 和 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer>FileOpenDialog 下。前两个只是将“文件打开对话框”作为值的键,最后一个将该 GUID 作为文件打开对话框项的值。 ...我想知道它是否从某个地方 missing 。您介意在您的系统上搜索它以查看它的显示位置吗?
      【解决方案3】:

      好的,我使用的是安装了 VS2008 的 Windows 7 x64。

      为 vc++ 更改的重新发送设置之一是使用不同的兼容模式 (vista sp2) 运行它。

      将它改回 xp sp3 并且消息(操作无法完成。ClassFactory 无法提供请求的类)消失了。

      【讨论】:

        【解决方案4】:

        (我还没有尝试修复安装, 因为我希望有一个解决方案 不会花那么长时间。)

        如果您还没有找到解决方案,那么修复您的 Visual Studio 安装似乎是目前最好的解决方案 - 看起来您已经投入了更多的时间来追踪有问题的 .dll,而不是修复安装。

        我搜索了几个小时来解决您的问题(您似乎也有 - 几乎没有一个相关论坛没有您的帖子),但没有发现任何特定于您的症状的内容还没试过。

        【讨论】:

          【解决方案5】:

          我们通常通过运行来解决这个问题:

          Windows XP上:

          secedit /configure /cfg %windir%\repair\secsetup.inf /db secsetup.sdb /verbose
          

          Windows Vista 上:

          secedit /configure /cfg %windir%\inf\defltbase.inf /db defltbase.sdb /verbose
          

          作为管理员。请确保不要中途停止,并在此之前备份您的注册表。

          这将恢复所有注册表权限,这通常会导致大多数 WMI 问题。

          【讨论】:

          • 这应该解决哪个问题? WMI 实例未找到问题?因为这个问题已经解决了。 ClassFactory 问题是我实际发布的问题。
          【解决方案6】:

          哈!我有同样的问题,并在this link 中找到,它提出了一个很好的解决方案。摘录如下:

          以前,我和你一样,我很郁闷,但不太甘心,我搜索了很多网页,但没有解决办法,所以我决定调查一下自己。我的笔记本有写字板,但是我不使用写字板,所以我关闭了“平板电脑输入服务”。我 发现“devenv.exe”会执行“wisptis.exe”。我知道通常“wisptis.exe”是由“Tablet PC Input Service”执行的。于是我打开“平板电脑输入服务”试试。结果:让我惊喜又开心!我的问题解决了!

          但是,我发现了另一个问题: 如果你从启动器启动 Visual Studio,比如 JetToolbar(像我一样),你会得到一个带有经典主题的 VS - 即一个普通的旧经典关闭框、最小化按钮和恢复按钮。但是,如果您从开始菜单或运行框(只需键入 devenv)启动 VS,它就会以正常的主题启动。现在,如果你得到了经典主题,你会得到“打开项目”的错误,等等。如果你得到了常规的主题,你就没有问题。因此,我自己的问题与我使用的启动器有关。

          对于最后一个问题 - 我找到了解决方案:如果您转到应用程序文件并单击属性,则有一个“禁用视觉样式”选项 - 确保您的启动器没有禁用视觉样式。 VS 在禁用它们的情况下无法正常工作。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-05-12
            • 1970-01-01
            • 2017-11-23
            • 2019-05-27
            • 1970-01-01
            • 2013-10-31
            相关资源
            最近更新 更多