打开“获取目录”对话框时出现COM类出厂错误80040154

时间:2011-09-04 07:31:59

标签: c# .net windows

我知道这个问题的常见原因与组件编译到的平台有关,我以前遇到过这个问题。但是,这是来自单个用户的报告,并且在他尝试打开用于选择文件或目录的对话框时发生。我这里不使用任何花哨的组件,只是标准组件。其中一个堆栈跟踪中的相关行是:

  

使用CLSID检索组件的COM类工厂   {DC1C5A9C-E88A-4DDE-A5A1-60F82A20AEF7}由于以下原因而失败   错误:80040154   System.Windows.Forms.OpenFileDialog.CreateVistaDialog()at   System.Windows.Forms.FileDialog.RunDialogVista(IntPtr hWndOwner)at at   System.Windows.Forms.FileDialog.RunDialog(IntPtr hWndOwner)at at   System.Windows.Forms.CommonDialog.ShowDialog(IWin32Window所有者)at   System.Windows.Forms.CommonDialog.ShowDialog()at   ScruffyDuck.AirportDesignEditor.MainForm.getOpenFileInfo(字符串   initialDirectory,String filter)

我在我的注册表中搜索了这个CLSID并提出了

  

%SYSTEMROOT%\ System32下\ COMDLG32.DLL

我想这并不奇怪。我假设,因为有许多其他用户没有这个问题必须与用户设置有关。在这种情况下,我很感激有关如何建议他的任何想法。

非常感谢

1 个答案:

答案 0 :(得分:3)

我现在只是猜测,因为这不是编程问题,所以如果我没有帮助,请不要给我,只是给出一些想法......:P

问题在于系统无法使COM对象超出该CLSID指定的COM类。出现这种情况的原因有很多:

  • comdlg32.dll未注册,请尝试使用regsvr32 comdlg32.dll
  • 注册
  • 系统accont对拥有CLSID {DC1C5A9C-E88A-4DDE-A5A1-60F82A20AEF7}的注册表项没有完全控制权限(权限)。您可以通过导航(或搜索注册表)到该密钥,右键单击它,并选择Permissions...给SYSTEM帐户完全控制它来检查。
  • 也可以尝试使用以上管理员帐户。
  • comdlg32.dll已损坏。如果间谍软件或其他恶意程序试图将自己挂钩到打开文件或浏览目录对话框并因此修改了lib ...就会发生这种情况......在这种情况下,您必须重新安装lib ...或windows。要检查lib是否正确,请对其进行MD5哈希,并与工作系统上的lib的MD5哈希进行比较。它们应该完全相同。

嗯,希望我帮忙。 :)