2012-05-22 2 views
1

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

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

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

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

Я видел несколько примеров NSH-скриптов в Интернете, которые делают бит и куски этого; Я пытаюсь собрать его вместе, и это похоже, что это будет сотни строк. Мой код пахнет неправильным.

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

+0

Что вы пробовали? Код NSIS * составляет * сто + строк. Это язык программирования, как и любой другой. –

+0

FYI, я рассматриваю возможность отключения NSIS до InnoSetup. Всегда хорошо иметь план B. Но я не буду принимать «Switch to InnoSetup!». или «Просто используйте WiX!» как ответ на этот вопрос. Мир нуждается в ответе на этот вопрос NSIS, окончательно и авторитетно. –

+1

В NSIS нет ничего плохого, и «переход на InnoSetup» является неправильным ответом. NSIS на самом деле более мощный. Я хочу сказать, что вы не задаете реального вопроса, так как «кто-то дает мне код». Я помню, когда я написал свой первый NSIS-скрипт, и мне потребовалось всего пару часов для всех перечисленных вами функций, а затем некоторых, включая тестирование. –

ответ

5

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

+0

Это то, что я искал. –

1

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

!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 
+0

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

+1

Я пропустил/забыл перезагрузку части вопроса, извините. (И кодирование сложных вещей в окне редактирования SO без тестирования, вероятно, не очень хорошая идея ...) – Anders

1

Великий мастер для NSIS является HM NIS Edit, который может проведет вас через вашего первого установщика, включая то, что вы упомянули выше, я верю.

http://hmne.sourceforge.net/

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

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

I recommend this process plugin

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

Delete /REBOOTOK file.txt 

Затем скопируйте ваш новый DLL файлы в папку.

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

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