我正准备为我正在开发的游戏开发我的第一个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,它可以引导你通过你的第一个安装程序,包括你上面提到的我相信的东西。
如果你想在NSIS中提供更新,我会推荐几件事情:
我推荐这个过程插件
如果你有DLL正在使用,你不能只删除它们。 但是,在NSIS中,您可以重命名它们,然后将它们标记为在下一次重新引导时删除,如下所示:
Delete /REBOOTOK file.txt
然后将新的DLL复制到文件夹中。
对于NSIS,有大量的插件,样本和很大的帮助,但是学习这门语言需要一点时间。 Inno的学习要容易得多,但当你学会坚持时,难以定制。 但是,我想说这两者是可以比较的,要么工作得很好。