简单的NSIS配方基本安装

我正准备为我正在开发的游戏开发我的第一个Windows安装程序。 我听说NSIS推荐,但我的需求是基本的,我不知道究竟是什么要求。

我想要一个简短的NSIS脚本,它可以在“Program Files”目录下安装文件目录(如果需要请求权限),在“开始”菜单中创build一个简单的快捷方式,并在“添加/删除程序”控制面板中注册一个卸载程序。

卸载程序只会删除目录并删除快捷方式,如果文件正在使用,则提示重新启动。

最后,我想通过卸载所有旧文件并安装新文件来支持升级,如果旧文件正在使用,则提示用户重新启动。

我已经看到一些在线的NSH脚本示例, 我正在试图把它放在一起,看起来好像是数百行。 我的代码闻起来像错误的东西。

我所描述的程序真的应该是数百行NSH吗? 当然有一个更简单的方法?

下载Eclipse ,然后将EclipseNSIS插件安装到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 Edit,它可以引导你通过你的第一个安装程序,包括你上面提到的我相信的东西。

http://hmne.sourceforge.net/

如果你想在NSIS中提供更新,我会推荐几件事情:

  1. 为您的应用程序创建一个方法来检查从您的服务器更新,通常在第一次加载时完成
  2. 下载新的安装程序并运行它(从你的应用程序,尽管任何人也可以从你的网站得到它)。
  3. 如果您的旧程序正在运行,则需要将其关闭。 NSIS有插件可以找到一个进程并杀死它。 这不是超级“好”,但可能是必要的。

我推荐这个过程插件

如果你有DLL正在使用,你不能只删除它们。 但是,在NSIS中,您可以重命名它们,然后将它们标记为在下一次重新引导时删除,如下所示:

 Delete /REBOOTOK file.txt 

然后将新的DLL复制到文件夹中。

对于NSIS,有大量的插件,样本和很大的帮助,但是学习这门语言需要一点时间。 Inno的学习要容易得多,但当你学会坚持时,难以定制。 但是,我想说这两者是可以比较的,要么工作得很好。