Что делает voodoo с системой для запуска приложений? (И как я могу заставить эти приложения работать без него?) - PullRequest
0 голосов
/ 26 апреля 2011

Я перешел черту отчаяния с этим парнем. Я был так уверен, что все это сводилось к простой проблеме x86 / x64 с достаточно простым решением . Но нет. Оно вернулось. Еще раз, чтобы укусить меня за задницу.

Видите ли, я создал приложение, и ранее у меня были проблемы с его установкой на ноутбук под управлением Vista. Затем я заметил, что ноутбук работает не только на Vista, но и на 64-битной архитектуре. Поэтому я установил Visual Studio 2010 на ноутбук и перекомпилировал одну из библиотек DLL для x64. Приложение работает. Все отличное.

За исключением случаев, когда я пытаюсь установить это же приложение на некоторых 32-битных компьютерах под управлением XP. И приложение не будет работать снова. Даже после того, как на них будут установлены .NET 4 и VC ++ 2010.

Итак, сейчас я подвожу итоги и появляется общая картина: приложение работает, только если VS2010 установлен на том же компьютере.

Мой вопрос: какие шаги предпринимает Visual Studio для обеспечения работы приложения? И как я могу выполнить эти шаги на других компьютерах без установки Visual Studio?


Обновление - мое приложение и как оно выходит из строя

Мое приложение вызывает две основные управляемые библиотеки - обе являются обертками для неуправляемых библиотек: EnguCV для обработки изображений и Audiere для вывода звука.

Когда я говорю, что это не работает, я имею в виду, что он падает до полного открытия. Ошибка является ошибкой DllNotFound и ссылается на Audiere.Net (оболочку) в качестве причины. К сожалению, ProcMon, похоже, не любит эти машины и через несколько секунд неизменно зависает (принимая всю ОС с собой).


Обновление 2 - решение VS

На тот случай, если кто-то захочет попробовать его самостоятельно, я загрузил полное (22 Мб в архиве) VS решение . Если вы хотите играть с audiere.dll, Audiere.Net.dll и libaudieresharpglue.dll, вам нужно взять Win32 Audiere DLL, lib и заголовок , а также привязку Харальда Филкера на C # .

Если кто-то достаточно безумен, чтобы поиграть, я был бы очень благодарен за укол здравомыслия.

Ответы [ 5 ]

3 голосов
/ 26 апреля 2011

Если вы перекомпилировали библиотеки DLL в , требующие x64, тогда приложение не будет работать на 32-битной машине, нет.

Если вы не используете взаимодействие с собственным кодомобычно лучше компилировать исполняемые сборки как x86, а библиотеки классов как "Любой ЦП".Принудительно запускайте 64-битную CLR только в том случае, если она вам действительно нужна - большую часть времени вам не нужно, а CLR x86 будет более эффективно использовать память.Если вы хотите работать как на x86, так и на x64, то и хотите использовать много памяти при работе на 64-битной Windows, тогда вы можете сделать исполняемую цель "Any CPU" тоже (в этом случае CLR по умолчаниюпоскольку архитектура будет загружена), но, опять же, делайте это только в том случае, если вам действительно нужно.

См. этот пост Rico Mariani для получения более подробной информации.

2 голосов
/ 26 апреля 2011

Я сделал это.(Почти плачет от радости, но это мужественно, верно?)

Ошибка ясно показывает, что причина где-то ниже Audiere.Net.dll. Отражатель говорит нам, что это зависит только от mscorlib и только P / вызывает libaudieresharpglue.dll. Dependency Walker указал, что libaudieresharpglue.dll зависит только от msvcr100d.dll и audiere.dll.

Поскольку мы знаем, что присутствуют и libaudieresharpglue.dll, и audiere.dll, неисправность должна быть связана сmsvcr100d.dll.

На машинах разработчиков (где приложение работает должным образом), запуск Process Explorer показывает, что этот пользователь живет на WINDOWS\system32\msvcr100d.dll.Я предполагал (из предыдущей болтовни), что VC ++ 2010 установил эту DLL, но я не могу найти ее на целевых машинах (на которых я только что установил VC ++ 2010).

В любом случае, скопировал его итеперь все работает как положено.

1 голос
/ 26 апреля 2011

Все сводится к тому, какие файлы DLL существуют (или не существуют) на целевом компьютере, либо в той же папке файла EXE, либо в любой папке, которая является частью глобальной переменной PATH.

Если вы можете отследить, какие DLL-файлы отсутствуют, просто добавьте их в EXE-файл при отправке клиентам.

0 голосов
/ 26 апреля 2011

Убедитесь, что ваш проект построен с использованием конфигурации AnyCPU.

Посмотрите на ссылку ниже для аналогичного вопроса, который отвечает на разницу между AnyCPU, x86 и x64

http://social.msdn.microsoft.com/Forums/en/netfx64bit/thread/0b21d7a4-d929-4ac3-8447-f51b9c28ec9c

Объяснение цели платформы: http://visualstudiohacks.com/articles/visual-studio-net-platform-target-explained/

Также: Что означает цель Visual Studio "Any CPU"?

0 голосов
/ 26 апреля 2011

У вас есть возможность компилировать для всех процессоров, если вы просто хотите использовать общий подход к работе программного обеспечения. Однако обратите внимание, что все ваши зависимости должны быть общими для этого подхода. Когда вы используете взаимодействие для собственных библиотек DLL, вам приходится создавать две версии (1 32-битная и 1 64-битная) по крайней мере для некоторых ваших приложений. Боль? конечно. Но это растущая боль.

Что касается «Мне нужна установленная Visual Studio», то, скорее всего, вы используете DLL, установленную с Visual Studio, или вам нужен какой-то тип среды выполнения на компьютере. Вам необходимо изучить зависимости программного обеспечения и определить, что необходимо добавить в программу установки. Если это собственный, а не .NET, вам нужен инструмент, который показывает зависимости COM (если COM) или аналогичный. Например, есть COM-проводник. Не уверен, но у sys internals (сейчас Microsoft) может быть бесплатный инструмент для зависимости.

Пока вы не определите зависимость, установка Visual Studio - ваш выбор. После этого вы можете убедиться, что зависимость установлена ​​и зарегистрирована, если COM, чтобы программа работала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...