с .NET 4.0/WPF Application/C#Исключение из HRESULT: 0x80040111 (CLASS_E_CLASSNOTAVAILABLE)
У меня есть следующий фрагмент кода в моем приложении, который открывает FileDialog, когда кнопка нажата Select
.
OpenFileDialog fdgSelectFile;
bool? dialogResult;
try
{
fdgSelectFile = new OpenFileDialog {DefaultExt = FileDialogDefaultExt, Filter = FileDialogFilter};
dialogResult = fdgSelectFile.ShowDialog();
if (dialogResult.HasValue && dialogResult.Value)
{
SelectedFilePath = fdgSelectFile.FileName;
// do your stuff
}
}
Этот фрагмент кода работает на других машинах, но не на моей машине. Он просто выдает исключение - как показано ниже - при нажатии кнопки Select
.
2015-04-28 14:33:47,453 [1] ERROR XXXX.XXXX.XXXX.ViewModels.UploadViewModel - SelectFile - System.Runtime.InteropServices.COMException (0x80040111): Creating an instance of the COM component with CLSID {DC1C5A9C-E88A-4DDE-A5A1-60F82A20AEF7} from the IClassFactory failed due to the following error: 80040111 ClassFactory cannot supply requested class (Exception from HRESULT: 0x80040111 (CLASS_E_CLASSNOTAVAILABLE)).
at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
at System.Activator.CreateInstance(Type type, Boolean nonPublic)
at System.Activator.CreateInstance(Type type)
at Microsoft.Win32.OpenFileDialog.CreateVistaDialog()
at Microsoft.Win32.FileDialog.RunVistaDialog(IntPtr hwndOwner)
at Microsoft.Win32.FileDialog.RunDialog(IntPtr hwndOwner)
at Microsoft.Win32.CommonDialog.ShowDialog()
at XXXX.XXXX.XXXX.ViewModels.UploadViewModel.SelectFile(Object param) in c:\XXXX\XXXX\Client\XXXX.XXXX.XXXX\ViewModels\UploadViewModel .cs:line 176
Обнаружение ошибки вызвана comdlg32.dll
из Microsoft.Win32
имен, внутри PresentationFramework.dll
сборки, переспросила я Регистрацию для этого CLS ID
reg query HKCR\CLSID | find /i "{DC1C5A9C-E88A-4DDE-A5A1-60F82A20AEF7}"
и вот что он говорит
HKEY_CLASSES_ROOT \ CLSID {DC1C5A9C-E88A-4dde-A5A1-60F82A20AEF7}
Я также попытался следующие
Как на this SO сообщение, я пытался зарегистрировать
dll
, но он вернулся домой, говоря[Window Title] RegSvr32
[Содержание] Был загружен модуль «comdlg32.dll», но ry-point DllRegisterServer не найден.
Убедитесь, что «comdlg32.dll» является допустимым DLL или OCX-файлом, а затем снова попробуйте .
[OK]
По this SO сообщение, я попытался изменить
Permissions
, но не повезло
Есть ли способ, это может быть решена отдельно от повторного -обработать машину или переустановить Windows?
Если это помогает: у меня есть .NET Framework v3.5/v4.0/v4.5.1 & v4.5.2 установлен в моей машине и PresentationFramework.dll
доступен во всех местах внутри папки
v3.5 : C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v3.5\Profile\Client
v4.0 : C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0
v4.5 : C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5
v4.5.1 : C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1
v4.5.2 : C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.2
Это сильно намекает на сломанный Windows, установить, запустить ПФС. exe/scannow. Выполните двойную проверку, скажем, с помощью Notepad.exe и используйте File + Open. Если проблема связана только с вашей программой, тогда возникает подозрение на проблему с потоками, например, создание потока STA, который не вызывает Application.Run(). –
@ HansPassant, то же самое работает и на других машинах. Я также могу открыть диалоговое окно открытия файла из других приложений –
@HansPassant - я смог воспроизвести эту проблему, отключив визуальные темы - это похоже на ошибку в оболочке WPF для OpenFileDialog и SaveFileDialog –