summaryrefslogtreecommitdiffstats
path: root/packaging/nsis/logray-common.nsh
diff options
context:
space:
mode:
Diffstat (limited to 'packaging/nsis/logray-common.nsh')
-rw-r--r--packaging/nsis/logray-common.nsh126
1 files changed, 126 insertions, 0 deletions
diff --git a/packaging/nsis/logray-common.nsh b/packaging/nsis/logray-common.nsh
new file mode 100644
index 00000000..4eaacd5c
--- /dev/null
+++ b/packaging/nsis/logray-common.nsh
@@ -0,0 +1,126 @@
+
+; ============================================================================
+; Name and version information
+; ============================================================================
+
+Unicode true
+; This improves the installer's appearance considerably here on a display scaled
+; to 225%, but checkboxes are comically small. We might be able to fix this
+; using the SysCompImg extension:
+; http://forums.winamp.com/showthread.php?t=443754
+ManifestDPIAware true
+; These might be correct in the future, but are currently undocumented:
+; http://forums.winamp.com/showthread.php?t=452632
+; ManifestDPIAware System
+; ManifestDPIAwareness "PerMonitorV2,System"
+
+!ifdef NSIS_INCLUDE_DIR
+!addincludedir ${NSIS_INCLUDE_DIR}
+!endif
+
+!include "logray-config.nsh"
+
+!define DISPLAY_NAME "${PROGRAM_NAME} ${VERSION} ${WIRESHARK_TARGET_PLATFORM}"
+Name "${DISPLAY_NAME}"
+
+!define PROGRAM_FULL_NAME "The ${PROGRAM_NAME} Log Analyzer"
+!define PROGRAM_NAME_PATH "${PROGRAM_NAME}.exe"
+
+!define UNINSTALLER_NAME "uninstall-logray.exe"
+
+VIAddVersionKey "ProductName" "${PROGRAM_NAME}"
+VIAddVersionKey "Comments" "My manta ray is all right."
+VIAddVersionKey "CompanyName" "${PROGRAM_NAME} development team"
+; NSIS handles U+00a9 but not a UTF-8 encoded copyright symbol.
+VIAddVersionKey "LegalCopyright" "${U+00a9} Gerald Combs and many others"
+VIAddVersionKey "LegalTrademarks" "Logray and the 'ray' logo are registered trademarks"
+VIAddVersionKey "FileDescription" "${PROGRAM_NAME} installer for Windows on ${WIRESHARK_TARGET_PLATFORM}"
+VIAddVersionKey "Language" "English"
+VIAddVersionKey "ProductVersion" "${PRODUCT_VERSION}"
+VIAddVersionKey "FileVersion" "${PRODUCT_VERSION}"
+VIProductVersion "${PRODUCT_VERSION}"
+
+XPStyle on
+
+
+; ============================================================================
+; Functions and macros
+; ============================================================================
+
+; Used to refresh the display of file association
+!define SHCNE_ASSOCCHANGED 0x08000000
+!define SHCNF_IDLIST 0
+
+!macro UpdateIcons
+ Push $R0
+ Push $R1
+ Push $R2
+
+ !define UPDATEICONS_UNIQUE ${__LINE__}
+
+ IfFileExists "$SYSDIR\shell32.dll" UpdateIcons.ok_shell32_${UPDATEICONS_UNIQUE} UpdateIcons.error_shell32_${UPDATEICONS_UNIQUE}
+UpdateIcons.ok_shell32_${UPDATEICONS_UNIQUE}:
+ System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v (${SHCNE_ASSOCCHANGED}, ${SHCNF_IDLIST}, 0, 0)'
+ Goto UpdateIcons.quit_${UPDATEICONS_UNIQUE}
+
+UpdateIcons.error_shell32_${UPDATEICONS_UNIQUE}:
+ MessageBox MB_OK|MB_ICONSTOP \
+ "Can't find 'shell32.dll' library. Impossible to update icons" \
+ /SD IDOK
+ Goto UpdateIcons.quit_${UPDATEICONS_UNIQUE}
+
+UpdateIcons.quit_${UPDATEICONS_UNIQUE}:
+ !undef UPDATEICONS_UNIQUE
+ Pop $R2
+ Pop $R1
+ Pop $R0
+
+; Force the icon cache to refresh
+; https://superuser.com/questions/499078/refresh-icon-cache-without-rebooting
+IfFileExists "$SYSDIR\ie4uinit.exe" 0 +2
+Exec '"$SYSDIR\ie4uinit.exe" -ClearIconCache'
+
+!macroend
+
+; ============================================================================
+; Push our known file extensions onto the stack, prepended with a marker
+; Note that this is a subset of dump_open_table in wiretap/file_access.c. We
+; probably don't want to grab JPEG or MP3 files.
+; ============================================================================
+
+; Used to add associations between file extensions and Logray
+!define LOGRAY_ASSOC "logray-log-file"
+
+!define FILE_EXTENSION_MARKER "FILE_EXTENSION_MARKER"
+
+!macro PushFileExtensions
+ Push "${FILE_EXTENSION_MARKER}"
+ Push ".scap"
+!macroend
+
+!macro IsLograyRunning
+; See if Logray is running
+; https://nsis.sourceforge.io/Check_whether_your_application_is_running
+${Do}
+
+ System::Call 'kernel32::OpenMutex(i 0x100000, b 0, t "Global\${PROGRAM_NAME}-is-running-{9CA78EEA-EA4D-4490-9240-FC01FCEF464B}") i .R0'
+ IntCmp $R0 0 checkRunningSession
+ System::Call 'kernel32::CloseHandle(i $R0)'
+ Goto isRunning
+
+checkRunningSession:
+ System::Call 'kernel32::OpenMutex(i 0x100000, b 0, t "${PROGRAM_NAME}-is-running-{9CA78EEA-EA4D-4490-9240-FC01FCEF464B}") i .R0'
+ IntCmp $R0 0 notRunning
+ System::Call 'kernel32::CloseHandle(i $R0)'
+
+isRunning:
+ ; You'd better go catch it.
+ MessageBox MB_RETRYCANCEL|MB_ICONEXCLAMATION "${PROGRAM_NAME} or one of its associated programs is running.$\r$\nPlease close it first." /SD IDCANCEL IDRETRY continueChecking
+ Quit
+
+notRunning:
+ ${ExitDo}
+
+continueChecking:
+${Loop}
+!macroend