Вопрос

Я готовлюсь развивать мой самый первый Windows Installer для игры, которую я разрабатываю. Я слышал, рекомендовал NSIS, но мои потребности являются базовыми, и я не могу понять, что именно требуется.

Я хотел бы короткий скрипт NSIS, который может установить каталог файлов в каталоге «программных файлов» (запрашивая разрешение при необходимости), создайте простой ярлык в меню «Пуск» и зарегистрируйте удаление в добавлении / удалении Панель управления программами.

Ударверщик просто удалит каталог и удалить ярлык, подсказывая перезагрузку, если файлы используются.

Наконец, я хотел бы поддерживать обновления, удалив все старые файлы и устанавливая новые, подсказывая пользователю перезагрузиться, если старые файлы используются.

Я видел некоторые образцы NSH Scripts онлайн, которые делают биты и куски этого; Я пытаюсь слить его вместе, и он выглядит так, будто это будет столько строк. Мой код пахнет, как неправильная вещь.

Это программа, которую я описываю, действительно должен быть сотни линий NSH? Конечно, есть проще?

Это было полезно?

Решение

Скачать Eclipse и впоследствии установить http Плагин Eclipsensiss в Eclipse.Это не только дает вам полнофункциональный редактор файлов NSIS (с завершением кода и все такое подобное), но также есть мастер для создания сценария для вас, отвечая на некоторые вопросы (название приложения, значокбыть использованным, ...).

Другие советы

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

!define Name "Foo"
Name "${Name}"
Outfile "${Name} setup.exe"
RequestExecutionLevel admin ;Require admin rights on NT6+ (When UAC is turned on)
InstallDir "$ProgramFiles\${Name}"

!include LogicLib.nsh
!include MUI.nsh

Function .onInit
SetShellVarContext all
UserInfo::GetAccountType
pop $0
${If} $0 != "admin" ;Require admin rights on NT4+
    MessageBox mb_iconstop "Administrator rights required!"
    SetErrorLevel 740 ;ERROR_ELEVATION_REQUIRED
    Quit
${EndIf}
FunctionEnd

!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"


Section
SetOutPath "$INSTDIR"
WriteUninstaller "$INSTDIR\Uninstall.exe"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Foo By Bar Inc."   "DisplayName" "${Name}"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Foo By Bar Inc."   "UninstallString" "$INSTDIR\Uninstall.exe"
;TODO: Install your files with the File command
CreateShortCut "$SMPROGRAMS\${Name}.lnk" "$INSTDIR\Foo.exe"
SectionEnd

Section "Uninstall"
;TODO: Delete your files
Delete "$SMPROGRAMS\${Name}.lnk"
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Foo By Bar Inc."
Delete "$INSTDIR\Uninstall.exe"
RMDir "$INSTDIR"
SectionEnd
.

Большой волшебник для NSIS - это редактирование HM NIS, которое может руководить вами через ваш первый установщик, включая то, что вы упомянули выше, я верю.

http://hmne.sourceforge.net/

Если вы хотите обеспечить Updater в NSIS, я бы порекомендовал несколько вещей:

  1. Создайте способ вашему приложению, чтобы проверить обновления с вашего сервера, обычно делается, когда он первый загрузок
  2. Загрузите новый установщик и запустите его (из приложения, хотя кто-то, вероятно, может получить его с вашего сайта).
  3. Если ваша старая программа работает, вам нужно закрыть его. NSIS имеет плагины, которые могут найти процесс и убить его. Это не супер «приятно», но может быть необходимо.
  4. Рекомендую этот процесс плагин

    Если у вас есть DLL, вы не можете просто удалить их. Однако в NSIS вы можете переименовать их, а затем пометить их для удаления на следующую перезагрузку, например:

    Delete /REBOOTOK file.txt
    
    .

    Затем скопируйте новую DLL в папку.

    Для NSIS есть тонна плагинов, образцов и большая помощь, но изучение языка занимает немного времени. Inno намного проще учиться, но сложнее настроить, когда вы попадаете в Nitty Gritty. Тем не менее, я бы сказал, что два сопоставимы в целом, и либо должен работать совсем хорошо.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top