Windows 基本安装的简单NSIS配方

Windows 基本安装的简单NSIS配方,windows,installation,nsis,Windows,Installation,Nsis,我正准备为我正在开发的游戏开发我的第一个Windows安装程序。我听过NSIS的推荐,但我的需求是基本的,我不知道到底需要什么 我想要一个简短的NSIS脚本,它可以在“Program files”目录中安装文件目录(必要时请求权限),在“开始”菜单中创建一个简单的快捷方式,并在“添加/删除程序”控制面板中注册卸载程序 卸载程序只需删除目录并删除快捷方式,如果文件正在使用,则提示重新启动 最后,我希望通过卸载所有旧文件并安装新文件来支持升级,如果旧文件正在使用,则提示用户重新启动 我在网上看到了一

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

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

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

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

我在网上看到了一些NSH脚本示例,它们可以完成这一部分;我试着自己把它吊在一起,它看起来有几百行长。我的代码闻起来好像是错的


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

然后将安装到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编辑,它可以指导您完成第一个安装程序,包括您上面提到的内容

如果您想在NSIS中提供更新程序,我建议您做几件事:

  • 为应用程序创建一种检查服务器更新的方法,通常在首次加载时执行
  • 下载新的安装程序并运行它(从你的应用程序,尽管任何人可能也可以从你的网站上获得)
  • 如果旧程序正在运行,则需要将其关闭。NSIS有一些插件可以找到一个进程并杀死它。这不是超级“好”,但可能是必要的
  • 如果你有DLL在使用中,你不能仅仅删除它们。但是,在NSIS中,您可以重命名它们,然后在下次重新启动时将它们标记为删除,如下所示:

    Delete /REBOOTOK file.txt
    
    然后将新的DLL复制到文件夹中


    对于NSIS来说,有大量的插件、示例和帮助,但是学习这种语言需要一点时间。Inno更容易学习,但当你触及到本质时,就更难定制了。不过,我想说,这两种方法总体上是可比的,两者都可以很好地发挥作用。

    您尝试过什么?NSIS代码有100多行。这是一种和其他语言一样的编程语言。仅供参考,我正在考虑将NSIS关闭到InnoSetup。有一个B计划总是好的。但我不会接受“切换到InnoSetup!”或“使用WiX!”作为这个问题的答案。世界需要这个NSIS问题得到明确和权威的回答。NSIS没有错,“切换到InnoSetup”是一个错误的答案。NSIS实际上更强大。我的意思是,你问的不是真正的问题,而是“有人给我代码”。我记得当我编写第一个NSIS脚本时,我只花了几个小时就完成了你列出的所有功能,然后包括一些测试。这是我一直在寻找的。这不会达到我希望在重新启动时替换正在使用的文件的目的,但这是一个很好的开始。对不起,我错过了/忘记了问题的重新启动部分。(在SO编辑框中编写复杂的代码而不进行测试也可能不是一个好主意……)