如何解决NSIS 安装日志中遗漏了一些日志
我正在使用支持安装日志的特殊 NSIS 版本。它工作正常,但在某些情况下,日志会被部分保存为一个部分。这意味着丢失了一些日志。我不确定这个问题的原因是什么。如果 NSIS 归档超过大小的日志文件?如果在安装过程中出现一些错误或异常(例如被杀毒软件阻止了某些exe)会怎样?
这里是安装脚本的结构:
!include "FileFunc.nsh"
!include "WinMessages.nsh"
!include "x64.nsh"
!include "WinVer.nsh"
!include "WordFunc.nsh"
!include "LogicLib.nsh"
RequestExecutionLevel admin
ShowInstDetails nevershow
ShowUninstDetails nevershow
AutoCloseWindow true
SetCompressor lzma
;major,minor,date,build
!define VERSION "1.0.0.1"
;Project name and version
!define PROJECT "Project1"
!define CONFIG_NAME "Config1"
!define SERVICE_NAME "Service01"
!define PROCESS_EXE "Process01.exe"
!define GUI_EXE "MainUI.exe"
!define COMMONDRIVER_EXE "ComDriver_v1.0.0.0.exe"
!define DEVICEDRIVER_EXE "DeviceDriver_v1.0.0.0.exe"
!define UNINSTALL_EXE "Uninstall.exe"
Name "${PROJECT}"
OutFile "${PROJECT}_Setup_v${VERSION}.exe"
!macro Cleanup
RMDir /r "$APPDATA\Company\Product\Service\Folder01"
RMDir /r "$INSTDIR\WPFUI"
SetRegView 32
DeleteRegKey HKLM "SOFTWARE\Company\Product\${PROJECT}"
!macroend
!macro WriteRegInfo
SetRegView 32
WriteRegStr HKLM "SOFTWARE\Company\Product\${PROJECT}" "ProductVersion" "${VERSION}"
WriteRegStr HKLM "SOFTWARE\Company\Product\${PROJECT}" "InstallDir" "$INSTDIR"
WriteRegStr HKLM "SOFTWARE\Company\Product\${PROJECT}" "UninstallPath" "$WINDIR\${UNINSTALL_UTILITY}"
WriteRegStr HKLM "SOFTWARE\Company\Product\${PROJECT}" "UninstallerPath" "$APPDATA\Company\Product\Uninstall\${PROJECT}\${PROJECT}_${UNINSTALL_EXE}"
!macroend
;install init
Function .onInit
!cd "..\..\NSIS\Build"
SetShellVarContext all
!insertmacro InitInstallDir
;UI has no staging folder.
!insertmacro WaitForGUI
!insertmacro StopServices
;copy prerequisites to temporary folder
InitPluginsDir
SetOutPath "$PLUGINSDIR"
File "..\..\..\driverInstaller\RzCom\${COMMONDRIVER_EXE}"
File "..\..\..\driverIinstaller\${DEVICEDRIVER_EXE}"
FunctionEnd
Section "install-commondriver"
ExecWait '"$PLUGINSDIR\${COMMONDRIVER_EXE}" /S' $0
${If} $0 != 0
SetErrorLevel $0
${EndIf}
SectionEnd
Section "install-devicedriver"
ExecWait '"$PLUGINSDIR\${DEVICEDRIVER_EXE}" /S' $0
${If} $0 != 0
SetErrorLevel $0
${EndIf}
ExecWait '"$PLUGINSDIR\${MIDDLEWARE_EXE}" /S' $0
SectionEnd
Section "install"
!insertmacro Cleanup
SetOutPath "$APPDATA\Company\Product\Folder01"
File /r ".\Devices\Defaults\${PID}"
SetOutPath "$INSTDIR\WPFUI"
File /r ".\UI\Company.UI"
!cd "${__FILEDIR__}"
;send signed uinstaller
SetOutPath "$APPDATA\Company\Product\Uninstall\${PROJECT}"
File "${PROJECT}_${UNINSTALL_EXE}"
!insertmacro WriteRegInfo
${If} $ISLASTMODULE != "FALSE"
!insertmacro StartServices
${EndIf}
SectionEnd
;--------------------------------
!macro InitInstallDir
;prioritize registry
SetRegView 32
${GetParameters} $0
StrCpy $INSTDIR ""
${GetOptions} "$0" "/LWIDIR=" $INSTDIR
${If} $INSTDIR != ""
StrCpy $INSTDIR "$INSTDIR\Product"
${Else}
ReadRegStr $INSTDIR HKLM "SOFTWARE\Company\Product\Product01" "InstallDir"
${EndIf}
${If} $INSTDIR == ""
StrCpy $INSTDIR "$PROGRAMFILES32\Company\Product"
${EndIf}
StrCpy $ISLASTMODULE "TRUE"
${GetOptions} "$0" "/ISLASTMODULE=" $ISLASTMODULE
${If} $ISLASTMODULE != ""
${StrFilter} "$ISLASTMODULE" "+" "" "" $ISLASTMODULE
${Else}
StrCpy $ISLASTMODULE "TRUE"
${EndIf}
!insertmacro EnableLogsWithHeader
!macroend
!macro EnableLogsWithHeader
; Get the date and time
${GetTime} "" "L" $0 $1 $2 $3 $4 $5 $6
; Turn on logging. This command must be after $INSTDIR
LogSet On
; Log the date and time
LogText "/******************* $0/$1/$2 ($3) $4:$5:$6 *******************/"
!macroend
!macro StopServices
SimpleSC::ExistsService "${SERVICE_NAME}"
Pop $0
${If} $0 == 0
SimpleSC::StopService "${SERVICE_NAME}" 1 30
!insertmacro WaitForSynapseService
!insertmacro WaitForProcess
${EndIf}
!macroend
!macro WaitForService
StrCpy $COUNTER "0"
${Do}
${nsProcess::FindProcess} "${SERVICE_EXE}" $R0
${If} $R0 == 0
Sleep 3000
IntOp $COUNTER $COUNTER + 1
${Else}
${Break}
${EndIf}
${If} $COUNTER >= 10
${nsProcess::KillProcess} "${SERVICE_EXE}" $R0
${EndIf}
${Loop}
!macroend
!macro WaitForProcess
StrCpy $COUNTER "0"
${Do}
${nsProcess::FindProcess} "${PROCESS_EXE}" $R0
${If} $R0 == 0
${nsProcess::KillProcess} "${PROCESS_EXE}" $R0
Sleep 1000
IntOp $COUNTER $COUNTER + 1
${Else}
${Break}
${EndIf}
${If} $COUNTER >= 3
${Break}
${EndIf}
${Loop}
!macroend
!macro WaitForGUI
StrCpy $COUNTER "0"
${Do}
${nsProcess::FindProcess} "${GUI_EXE}" $R0
${If} $R0 == 0
${nsProcess::KillProcess} "${GUI_EXE}" $R0
Sleep 1000
IntOp $COUNTER $COUNTER + 1
${Else}
${Break}
${EndIf}
${If} $COUNTER >= 3
${Break}
${EndIf}
${Loop}
!macroend
!macro StopServices
SimpleSC::ExistsService "${SERVICE_NAME}"
Pop $0
${If} $0 == 0
SimpleSC::StopService "${SERVICE_NAME}" 1 30
!insertmacro WaitForService
!insertmacro WaitForProcess
${EndIf}
!macroend
这是被截断的示例 install.log,我的日志以丢失的日期/时间标题开头。
CreateDirectory: "C:\ProgramData\Company\Product\Uninstall\Product01" (1)
CreateDirectory: "C:\ProgramData\Company\Product\Uninstall\Product01" created
File: overwriteflag=0,allowskipfilesflag=2,name="Product01_Uninstall.exe"
File: wrote 50072 to "C:\ProgramData\Company\Product\Uninstall\Product01\Product01_Uninstall.exe"
SetFlag: 12=0
WriteRegStr: "HKEY_LOCAL_MACHINE\SOFTWARE\Company\Product\Product01" "ProductVersion"="3.5.1215.120103"
WriteRegStr: "HKEY_LOCAL_MACHINE\SOFTWARE\Company\Product\Product01" "InstallDir"="C:\Program Files (x86)\Company\Product"
WriteRegStr: "HKEY_LOCAL_MACHINE\SOFTWARE\Company\Product\Product01" "UninstallPath"="C:\Windows\Installer\Uninstaller.exe"
WriteRegStr: "HKEY_LOCAL_MACHINE\SOFTWARE\Company\Product\Product01" "UninstallerPath"="C:\ProgramData\Company\Product\Uninstall\Product01\Product01_Uninstall.exe"
Delete: DeleteFile("C:\Windows\TEMP\nswCEA7.tmp\nsProcess.dll")
Delete: DeleteFile on Reboot("C:\Windows\TEMP\nswCEA7.tmp\nsProcess.dll")
Delete: DeleteFile("C:\Windows\TEMP\nswCEA7.tmp\PID0085Drv_v0.1.0.0.exe")
Delete: DeleteFile("C:\Windows\TEMP\nswCEA7.tmp\ComDriver_v1.0.0.0.exe")
Delete: DeleteFile("C:\Windows\TEMP\nswCEA7.tmp\SimpleSC.dll")
Delete: DeleteFile("C:\Windows\TEMP\nswCEA7.tmp\System.dll")
RMDir: RemoveDirectory("C:\Windows\TEMP\nswCEA7.tmp\")
RMDir: RemoveDirectory on Reboot("C:\Windows\TEMP\nswCEA7.tmp\")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。