我准备为我正在开发的游戏开发我的第一个Windows安装程序。我听说过NSIS推荐,但我的需求是基本的,我无法弄清楚到底需要什么。
我想要一个简短的NSIS脚本,它可以在" Program Files"中安装文件目录。目录(必要时请求权限),在“开始”菜单中创建一个简单的快捷方式,并在“添加/删除程序”控制面板中注册卸载程序。
卸载程序只会删除目录并删除快捷方式,如果文件正在使用,则提示重新启动。
最后,我想通过卸载所有旧文件并安装新文件来支持升级,如果旧文件正在使用,则提示用户重新启动。
我已经在网上看到了一些样本NSH脚本,这些脚本可以做到这一点点;我试图将它自己拼凑在一起,看起来它会长达数百行。我的代码闻起来像是错误的东西。
我描述的程序真的应该是数百行的NSH吗?当然有更简单的方法吗?
答案 0 :(得分:5)
Download Eclipse然后将EclipseNSIS plugin安装到Eclipse中。这不仅为您提供了NSIS文件的全功能编辑器(代码完成和所有类似),而且还通过回答一些问题(应用程序标题,图标)为您创建向导创建脚本待用,......)。
答案 1 :(得分: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
答案 2 :(得分:1)
NSIS的一个伟大的向导是HM NIS编辑,它可以指导您完成第一个安装程序,包括我上面提到的内容。
如果您想在NSIS中提供更新程序,我建议您做一些事情:
I recommend this process plugin
如果您正在使用DLL,则不能只删除它们。但是,在NSIS中,您可以重命名它们,然后在NEXT reboot上将它们标记为删除,如下所示:
Delete /REBOOTOK file.txt
然后将新DLL复制到文件夹中。
对于NSIS,有大量的插件,样本和很多帮助,但学习语言需要一点时间。 Inno更容易学习,但是当你了解细节时更难定制。但是,我会说两者总体上是可比较的,要么两者都应该正常工作。