2009-08-13 7 views
3

, когда я пытаюсь запустить мой C# приложение на другом компьютере, чем она была разработана, я получаю следующее сообщение об ошибке:C# приложение не запускается на другом компьютере

System.IO.FileLoadException: Could not load file or assembly 'Widgets3D, Version=1.0.3511.25568, Culture=neutral, PublicKeyToken=null' or one of its dependencies. This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem. (Exception from HRESULT: 0x800736B1)

File name: 'Widgets3D, Version=1.0.3511.25568, Culture=neutral, PublicKeyToken=null' ---> System.Runtime.InteropServices.COMException (0x800736B1): This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem. (Exception from HRESULT: 0x800736B1)

я проверил зависимостях ходунки и монитор процесса, но не смог найти недостающие DLL. особенно тот, указанный в ошибке Widgets3D.dll есть!

Оба компьютера обновлены с последним пакетом обновлений и обновлениями XP. приложение работает на многих ПК здесь. есть только эта проблема, которая создает проблему.

EDIT: , как предложил я попытался regsvr32 DLL, отсутствует, но это дает мне эту ошибку:

LoadLibrary("./Widgets3D.dll") failed - This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem.

спасибо!

+0

Я полагаю, что Widgets3D является сторонней библиотекой/компонентом, который зависит от других DLL/компонентов. Полагаю, у вас будет настройка этого компонента. Можете ли вы запустить эту настройку, а затем попробовать запустить приложение снова? – Kirtan

+0

no Widgets3D - это моя собственная библиотека. но это зависит от других библиотек thridparty. (в то время как движок ogre3D), все DLL-файлы из ogre находятся в одном каталоге. – clamp

+0

Зарегистрированы ли они с помощью 'regsvr32'? – Kirtan

ответ

1

на всякий случай вас интересует. мы нашли решение проблемы недавним исправлением безопасности для VC KB971090

Удаление этого исправления и восстановление DLL решили проблему.

есть довольно много тем по этому поводу: https://stackoverflow.com/search?q=KB971090

2

Чтение это исключение, здесь важная часть:

System.Runtime.InteropServices.COMException

Это не сборка .Net. Это COM-библиотека, и ее необходимо зарегистрировать.

+0

спасибо. что именно вы имеете в виду, зарегистрировавшись? yes dll - это cpp-библиотека. – clamp

+0

См. Ответ на вопрос о том, как это сделать. –

2

Должен ли быть установлен widgets3d? Попробуйте Regsvr32 над ним на другой машине.

Просто откройте окно командной строки и выполните команду:

Regsvr32.exe path-to-your-widgets3d.dll 

и повторите попытку.

Ошибка библиотеки загрузки, похоже, указывает на то, что другие связанные DLL-файлы, требуемые 3d-библиотекой, возможно, не зарегистрированы на целевой машине. Попробуйте запустить установщик для 3d-библиотеки на машине.

Также проверьте this post

+0

спасибо, но извините, я не понимаю, что вы подразумеваете под regsrvr32? widgets3d.dll - библиотека C++ – clamp

+0

Это библиотека C++, но она отображается через COM, поэтому вам нужно запустить команду, описанную в приведенном выше ответе. Вы попробовали? – Armbrat

+0

да я сделал. см. мое редактирование для сообщения об ошибке. Третья библиотека, которую использует Widgets3D.dll, - ogre3d. но это всегда работало. все плагины огров там на месте. – clamp

1

i checked with dependency walker and process monitor but couldnt find any missing DLLs.

Там нет необходимости делать это. Просто зайдите на Start -> Run -> regsvr32 <path of Widgets3D.dll>\Widgets3D.dll -> Press Enter.

Выполнено!

+0

спасибо. Я попробовал это, но я получил еще одну ошибку. см. мое редактирование. – clamp

1

Widgets3D.dll, вероятно, зависит от библиотек времени выполнения C++. Возьмите соответствующий «Visual C++ Redistributable» для компилятора, с которым он был построен и запускается в целевой системе. Вы не можете загружать отладочные DLL-файлы из Microsoft, поэтому, надеюсь, он был создан в конфигурации выпуска.

+0

спасибо! Я попытался установить vcredist_x86.exe для VS2005, но все же я получил то же сообщение об ошибке, что и раньше. – clamp

+0

Как я уже сказал, убедитесь, что он не встроен в Debug. Также проверьте журнал системных событий в разделе «Администрирование»; иногда вы можете получить более значимый текст ошибки. – ChrisV

1

Aaah, DLL-hell, я полагаю. Может быть полезно попытаться отменить регистрацию и снова зарегистрировать его. Если он был недавно перемещен с последнего раза, его сначала необходимо перенести, чтобы он не был зарегистрирован, прежде чем снова зарегистрироваться. Я испытал это много, используя COM-библиотеки DLL.

Надеюсь, что это поможет.

+1

спасибо, но даже когда я пытаюсь его отменить, я получаю это сообщение об ошибке: LoadLibrary («Widgets3D.dll») не удалось - это приложение не удалось запустить, потому что неправильная конфигурация приложения. Переустановка приложения может решить проблему. – clamp

1

Удаление является одним из способов решения этой проблемы, но если у вас есть компонент ATL, который уязвим, вы определенно хотите патч безопасности и делают необходимые изменения в вашем приложении, чтобы воспользоваться исправлениями безопасности.

Способ, которым я имел дело с этим, заключается в разработке обходного пути, позволяющего устанавливать патч, но при его создании все еще нацелены на старые версии библиотек DLL. Я описал это решение here.

Смежные вопросы