Проверка зависимостей .NET перед запуском - PullRequest
5 голосов
/ 04 февраля 2010

У меня есть несколько приложений, над которыми я работаю и которые хотел бы распространять друзьям, которым требуются Microsoft .dll и / или интегрированные среды.В частности, XNA.Я устал от того, чтобы получать от них электронные письма с надписью «Сбой», хотя на самом деле все, что произошло, это то, что у них не установлено XNA (или .NET 3.5, или что-то еще).Тем не менее, Main не может перехватить эти ошибки, потому что .exe загружает их еще до того, как main выполнится.

Итак, мой вопрос: как мне создать средство запуска, которое могло бы проверять такие вещи, как .NET 3.5?, XNA и т. Д. И отображают приятное сообщение об ошибке («Это приложение требует XNA 3.0, загрузите его здесь!») Вместо того, чтобы выглядеть так, как будто оно разбилось?

ОБНОВЛЕНИЕ: Я должен был указать, что хочу это сделатьбез использования установщика.У меня есть установщик WIX, который позволяет мне проверять зависимости, но иногда я просто хочу загрузить zip для людей, с которыми можно поиграть.

Ответы [ 3 ]

7 голосов
/ 04 февраля 2010

Чтобы сделать это без установщика, вам может потребоваться создать сценарий «запуска», который делает немного больше, чем просто вызывает «реальную» точку входа после выполнения любых предварительных проверок зависимостей.

Поскольку отсутствующие зависимости, по-видимому, являются очень распространенным источником боли для вас, вероятно, целесообразно написать модуль запуска таким образом, чтобы не иметь никаких зависимостей, которые еще не установлены на чистой установке Windows, например Сценарий AutoIt , упакованный как исполняемый файл.

Const $AppTitle = 'Whizzy Game'
Const $MB_ICONERROR = 16

If RegRead('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5', 'Install') <> 1 Then
    MsgBox($MB_ICONERROR, $AppTitle, 'The .NET Framework runtime v3.5 is required to run.')
    Exit 1
EndIf

If RegRead('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\XNA\Framework\v3.1', 'Installed') <> 1 Then
    MsgBox($MB_ICONERROR, $AppTitle, 'The XNA Framework runtime v3.1 is required to run.')
    Exit 1
EndIf

Exit RunWait('WhizzySoftware.WhizzyGame.EntryPoint.exe')
2 голосов
/ 04 февраля 2010

Это проще всего сделать во время установки.Включите Microsoft XNA Framework Redistributable в ваш установочный пакет.

Вы можете использовать функцию MsiQueryProductState , чтобы определить, установлена ​​ли уже платформа.

Или вы можете проверить реестр на:

[HKEY_LOCAL_MACHINE\Software\Microsoft\XNA\Framework\v3.1]
Installed=1

(Эта проверка может быть выполнена в приложении запуска).

Вот статья о распространении вашей игры сраздел по обнаружению и установке необходимых компонентов.

1 голос
/ 04 февраля 2010

Вы можете создать проект установки (который компилируется в установщик MSI) для вашего приложения. В конфигурации этого установщика вы можете установить предварительные условия, такие как .NET Framework vX.X. Я не совсем уверен насчет XNA, но я предполагаю, что это также может быть указано в качестве предварительного условия.

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