208 lines
6.2 KiB
NSIS
208 lines
6.2 KiB
NSIS
|
|
; 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
|