我正准备开发我的第一个Windows安装程序,了解我正在开发的游戏。我听到了NSIS推荐,但我的需求是基本的,我无法弄清楚究竟需要什么。

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

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

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

我已经看到了一些在线的样本脚本,那可以做到这一点;我想自己把它吊在一起,看起来很长一条线。我的代码闻起来像错误的东西。

是我描述的程序真的应该是数百行的nsh?肯定有一种更简单的方法?

有帮助吗?

解决方案

下载eclipse 然后安装 eclipsensis plugin 进入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编辑,它可以指导您通过第一个安装程序,包括您上面提到的内容我相信。

http://hmne.sourceforge.net/

如果要在NSI中提供更新程序,我会推荐一些事情:

  1. 为您的应用程序创建一种方法来检查服务器的更新,通常在第一次加载
  2. 时完成
  3. 下载新安装程序并运行它(来自您的应用程序,虽然任何人可能都可以从您的网站上获取它)。
  4. 如果您的旧程序正在运行,则需要关闭它。 NSIS有能够找到过程并杀死它的插件。这并不是超级“好”,但可能是必要的。
  5. 我推荐这个过程插件

    如果您在使用中有DLL,则无法删除它们。但是,在NSIS中,您可以重命名它们,然后将它们标记在下一次重新启动时删除,如:

    Delete /REBOOTOK file.txt
    
    .

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

    对于NSIS,有一吨插件,样品和伟大的帮助,但学习语言需要一点时间。 Inno更容易学习,但是当您到达Nitty Gritty时更难定制。但是,我会说这两个总体相当,要么应该工作得很好。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top