Skip to content
This repository has been archived by the owner on Feb 11, 2023. It is now read-only.

Commit

Permalink
installer: NSIS scripts for x86 and x64
Browse files Browse the repository at this point in the history
created two separate installers to avoid embedding both versions of vcredist.exe and certmgr.exe.  to create an installer, first place all of the required files in the installer.x* directory, then compile the .nsi script with NSIS from http://nsis.sourceforge.net/

Signed-off-by: Casey Bodley <cbodley@citi.umich.edu>
  • Loading branch information
Casey Bodley authored and cbodley committed Jul 9, 2013
1 parent 0ae8a28 commit 8beacd4
Show file tree
Hide file tree
Showing 2 changed files with 404 additions and 0 deletions.
207 changes: 207 additions & 0 deletions installer.x64/nfs41-x64.nsi
Original file line number Diff line number Diff line change
@@ -0,0 +1,207 @@
; Use modern interface
!include MUI2.nsh
!include x64.nsh
!define MUI_FINISHPAGE_NOAUTOCLOSE

; General
Name "NFSv4.1 Client"
OutFile "ms-nfs41-client-setup-x64.exe"
InstallDir "$PROGRAMFILES64\NFSv4.1 Client"
InstallDirRegKey HKLM "Software\ms-nfs41-client" "InstallDir"
ShowInstDetails show
RequestExecutionLevel admin

; Pages
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_UNPAGE_INSTFILES

; Write the uninstall keys for Windows
Section "nfs41"
; needed for bcdedit and installing from .inf
${DisableX64FSRedirection}
SetRegView 64

SetOutPath "$INSTDIR\"
WriteRegStr HKLM SOFTWARE\ms-nfs41-client "InstallDir" "$INSTDIR"

WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\ms-nfs41-client" "DisplayName" "NFSv4.1 Client Driver"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\ms-nfs41-client" "Publisher" "University of Michigan"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\ms-nfs41-client" "UninstallString" '"$INSTDIR\uninstall.exe"'
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\ms-nfs41-client" "NoModify" 1
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\ms-nfs41-client" "NoRepair" 1
WriteUninstaller "uninstall.exe"
SectionEnd

Section "certificate"
File CertMgr.exe
File nfs41_driver.cer
DetailPrint "Installing the driver certificate"

; install the test certificate to the trusted root store
nsExec::Exec '"$INSTDIR\CertMgr.exe" /add /c "$INSTDIR\nfs41_driver.cer" /s /r localMachine root'
Pop $R0
${If} $R0 != 0
Abort "Failed to install driver certificate: $R0"
${EndIf}

; enable test signing
nsExec::Exec '$SYSDIR\bcdedit.exe /set testsigning on'
Pop $R0
${If} $R0 != 0
Abort "Failed to enable test signing: $R0"
${EndIf}

; bcdedit requires a reboot
SetRebootFlag true

; clean up
Delete $INSTDIR\CertMgr.exe
Delete $INSTDIR\nfs41_driver.cer
SectionEnd

; install the driver's .inf
Section "nfs41_driver"
; existing nfs41_np.dll must be removed before installing from .inf
IfFileExists "$SYSDIR\nfs41_np.dll" 0 update_driver
Rename $SYSDIR\nfs41_np.dll $SYSDIR\nfs41_np.dll.old
Delete /rebootok $SYSDIR\nfs41_np.dll.old
Goto update_driver

update_driver:
File nfs41rdr.inf
File nfs41_driver.sys
File nfs41_np.dll
DetailPrint "Installing the NFSv4.1 Client driver"

nsExec::Exec '$SYSDIR\rundll32.exe setupapi.dll,InstallHinfSection DefaultInstall 132 $INSTDIR\nfs41rdr.inf'
Pop $R0
${If} $R0 != 0
Abort "Failed to install nfs41rdr.inf: $R0"
${EndIf}

Delete $INSTDIR\nfs41_driver.sys
Delete $INSTDIR\nfs41_np.dll
SectionEnd

; visual studio runtime
Section "msvcrt"
; check whether it's already installed
SetRegView 32
ReadRegDWORD $R0 HKLM Software\Microsoft\VisualStudio\10.0\VC\VCRedist\x64 Installed
SetRegView 64
IfErrors 0 msvcrt_already_installed

File vcredist_x64.exe
DetailPrint "Installing the Visual Studio runtime library"

nsExec::ExecToLog '"$INSTDIR\vcredist_x64.exe" /q /norestart'
Pop $R0
${If} $R0 == 3010
; vcredist requires a reboot
SetRebootFlag true
${ElseIf} $R0 != 0
Abort "Failed to install the Visual Studio runtime library: $R0"
${EndIf}

Delete $INSTDIR\vcredist_x64.exe
Return

msvcrt_already_installed:
DetailPrint "Visual Studio runtime library is already installed"
SectionEnd

; register the network provider in ProviderOrder
Section "nfs41_np"
File nfs_install.exe
DetailPrint "Registering the NFSv4.1 Client as a network provider"

nsExec::Exec '"$INSTDIR\nfs_install.exe"'
Pop $R0
${If} $R0 != 0
Abort "Failed to register the network provider: $R0"
${EndIf}
SectionEnd

; config files required by nfsd/tirpc
Section "nfsd-config"
DetailPrint "Installing configuration files"
File netconfig
File ms-nfs41-idmap.conf
CreateDirectory C:\etc
Rename netconfig C:\etc\netconfig
Rename ms-nfs41-idmap.conf C:\etc\ms-nfs41-idmap.conf
SectionEnd

; add the debug nfsd and grant write access to its log files
Section "nfsd_debug"
File nfsd_debug.exe
File nfsddbg.log
File nfsderr.log
DetailPrint "Installing debug version of nfsd.exe"

nsExec::Exec '$SYSDIR\icacls.exe nfsd*.log /grant *S-1-5-32-545:(R,W)'
Pop $R0
${If} $R0 != 0
Abort "Failed to grant write access to log files: $R0"
${EndIf}
SectionEnd

; start nfsd service
Section "nfsd"
; existing service must be stopped before updating executables
IfFileExists "$INSTDIR\nfsd.exe" 0 update_nfsd
DetailPrint "Stopping the existing NFSv4.1 Client service"
nsExec::ExecToLog '"$INSTDIR\nfsd.exe" -remove'
Goto update_nfsd

update_nfsd:
File nfsd.exe
File libtirpc.dll
File nfs_mount.exe
DetailPrint "Starting the NFSv4.1 Client service"

nsExec::ExecToLog '"$INSTDIR\nfsd.exe" -install'
Pop $R0
${If} $R0 != 0
Abort "Failed to register the service: $R0"
${EndIf}

IfRebootFlag 0 +3
MessageBox MB_YESNO|MB_ICONQUESTION "The system needs to be restarted to complete the installation. Would you like to reboot now?" IDNO +2
Reboot
SectionEnd

; Uninstaller
Section "Uninstall"
${DisableX64FSRedirection}
SetRegView 64

DetailPrint "Stopping the NFSv4.1 Client service"
nsExec::ExecToLog '"$INSTDIR\nfsd.exe" -remove'

DetailPrint "Unregistering the network provider"
nsExec::ExecToLog '"$INSTDIR\nfs_install.exe" 0'

DetailPrint "Uninstalling the driver"
nsExec::ExecToLog '$SYSDIR\rundll32.exe setupapi.dll,InstallHinfSection DefaultUninstall 132 $INSTDIR\nfs41rdr.inf'

DetailPrint "Disabling test signing"
nsExec::ExecToLog '$SYSDIR\bcdedit.exe /set testsigning off'

DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\ms-nfs41-client"
DeleteRegKey HKLM SOFTWARE\ms-nfs41-client

DetailPrint "Removing files"
RMDir /r "$INSTDIR"
RMDir /r C:\etc

Delete /rebootok $SYSDIR\drivers\nfs41_driver.sys
Delete /rebootok $SYSDIR\nfs41_np.dll
Delete /rebootok $SYSDIR\nfsddbg.log
Delete /rebootok $SYSDIR\nfsderr.log

IfRebootFlag 0 +3
MessageBox MB_YESNO|MB_ICONQUESTION "The system needs to be restarted to complete the cleanup. Would you like to reboot now?" IDNO +2
Reboot
SectionEnd
Loading

0 comments on commit 8beacd4

Please sign in to comment.