Программа, созданная на Win7, не будет запускаться на WinXP

#c #windows-7 #visual-studio-2005 #windows-xp

#c #windows-7 #visual-studio-2005 #windows-xp

Вопрос:

У меня есть проект, который я создаю на Windows 7 (32-разрядной версии) с использованием Visual Studio 2005. Программа отлично собирается, и я могу перенести ее на другой компьютер с Windows 7 и запустить ее просто отлично. Проблема возникает, когда я пытаюсь переместить ее на компьютер с Windows XP Pro. При попытке запустить файл я получаю следующую ошибку:

«Не удалось запустить это приложение, поскольку конфигурация приложения неверна. Переустановка приложения может устранить эту проблему.»

Когда я открываю средство просмотра событий, возникают три системные ошибки, связанные с этой проблемой:

  • Зависимая сборка Microsoft.VC80.Не удалось найти CRT, и последней ошибкой было то, что указанная сборка не установлена в вашей системе.
  • Ошибка частичной сборки для Microsoft.VC80.CRT. Сообщение об ошибке ссылки: Указанная сборка не установлена в вашей системе.
  • Не удалось сгенерировать контекст активации для [путь к моему exe]. Справочное сообщение об ошибке: операция успешно завершена.

Я попытался установить распространяемый пакет Visual C 2005 SP1, который не помогает.

Если я создам проект на компьютере с XP, я смогу запустить его на другом компьютере с XP (на котором нет распространяемого C ) и на компьютере с Windows 7.

Постоянное построение на XP не является жизнеспособным вариантом, поскольку я не единственный человек, который будет создавать это, и все остальные будут использовать Win7.

Комментарии:

1. Это отладочная версия, которую вы пытаетесь запустить или выпустить?

2. Поскольку вы видите эти ошибки, в ваш исполняемый файл был встроен манифест. Не могли бы вы опубликовать это?

3. На вашем компьютере Win7, вероятно, установлено недавнее исправление безопасности для библиотек времени выполнения VS2005. Вам нужно создать проект установки, чтобы установить правильные библиотеки DLL на целевой компьютер. Это, как правило, требование для программ, скомпилированных с помощью /MD.

4. Номер версии манифеста новее, чем у XP, если я сохраню исполняемый файл XP как файл .manifest в том же каталоге, это сработает… есть ли способ изменить номер версии в манифесте на меньший?

Ответ №1:

Проверьте отсутствующие системные библиотеки DLL с помощью Dependency Walker, если это собственный двоичный файл — http://www.dependencywalker.com /

Также проверьте, есть ли у вас необходимые WINVER http://msdn.microsoft.com/en-us/library/aa383745(v=vs.85).aspx в противном случае SDK возвращается к версии SDK, которая является Vista для более новых версий. Поэтому вы можете случайно вызвать несколько функций, которые даже недоступны в XP.

Комментарии:

1. Скорее всего, проблема в значении WINVER макроса, 1

2. Я использовал средство устранения зависимостей как на Win7, так и на WinXP .exe. У них то же самое. требуется библиотека dll, но в Win7 она отсутствовала. Я использовал ResHack, чтобы открыть оба файла и просмотреть их манифесты (кто-то упомянул их здесь, и я быстро погуглил). Они те же, за исключением номера версии отсутствующей библиотеки dll. Я скопировал содержимое манифеста из версии WinXP и сохранил его в файле .manifest в том же каталоге, что и версия Win7, и теперь он запускается. Есть ли способ заставить встроенный манифест использовать меньший номер версии?

3. @MaddHatter : Изменение манифеста делает шаг назад — что вам следует сделать, так это убедиться, что установлен самый последний redist, который, как я полагаю, в настоящее время является этим .

Ответ №2:

Это то, что в конечном итоге устранило проблему:

Скопируйте следующую папку: "C:Program FilesMicrosoft Visual Studio 8VCredistx86Microsoft.VC80.CRT" (поскольку это файл, упомянутый в программе просмотра событий) в тот же каталог, что и .exe, у меня возникли проблемы с запуском. Это позволяет программе использовать зависимость, для которой она была создана.

Комментарии:

1. Хотя это может решить вашу проблему, это не лучший способ справиться с этим. После следующего обновления системы безопасности CRT у вас может возникнуть та же ситуация. Лучшее решение — установить соответствующий CRT, распространяемый вместе с вашей программой установки. Таким образом, ваши клиенты также получат выгоду от обновлений безопасности от Microsoft для CRT.

Ответ №3:

Мы столкнулись с аналогичной проблемой после обновления нашей версии Visual Studio до Visual Studio 2005 SP1. Поставляется с обновленной версией MFC и CRT.

Вы можете обнаружить проблему с помощью Dependency Walker (http://www.dependencywalker.com /).

Если кажется, что это так, попробуйте убедиться, что применен центр обновления Windows. Вы также можете загрузить и запустить распространяемый пакет Visual Studio 2005 SP1.

Visual Studio 2005, распространяемаяhttp://www.microsoft.com/download/en/details.aspx?displaylang=enamp;id=14431

Visual Studio 2005 SP1, распространяемыйhttp://www.microsoft.com/download/en/details.aspx?displaylang=enamp;id=5638

Вивиан Де Смедт.

Ответ №4:

Сборки — это .NET, а не машинный код. Возможно, вам не хватает .NET framework. Распространяемый Visual C не будет включать сборку .NET.

Комментарии:

1. Чтобы запутать программистов, MSFT также вызывает собственные сборки DLL со строгими именами. Читайте здесь: msdn.microsoft.com/en-us/library/ms235624 (v = против 80).aspx Сборки, перечисленные там, не имеют ничего общего с .NET

2. @Pablo: Я считаю, что для того, чтобы собственная библиотека была точно помечена как «сборка», она должна сопровождаться манифестом (но я не уверен в этом).

Ответ №5:

Программное обеспечение, созданное на более новых операционных системах или версиях библиотек, скорее всего, будет зависеть от новых API или возможностей, которых нет в более старых версиях операционной системы или библиотек.

Вы можете либо:

  • создайте свое программное обеспечение на самой старой системе, которую вы собираетесь поддерживать. Это предполагает, что более новые версии системы сохранили обратную совместимость с базовой версией. Ваше программное обеспечение не сможет воспользоваться преимуществами функций, доступных в более новых версиях ОС, но должно быть способно работать на всех обратно совместимых системах, которые будут поставлены в будущем.

  • создайте свое программное обеспечение один раз для каждой системы, на которой вы собираетесь его развернуть. Это требует больше работы, но означает, что вы можете настроить свое программное обеспечение так, чтобы оно использовало преимущества новых API и возможностей, поскольку они доступны на различных версиях платформы.

Комментарии:

1. 1 для противодействия любому движку, вызывающему даунвотер. Я ненавижу их, идиотов.

2. Исполняемый файл зависит не от операционной системы, используемой для запуска компилятора, а от настроек проекта и версии SDK.

3. VC80 не является частью операционной системы