diff options
Diffstat (limited to 'packaging/nsis/logray-common.nsh')
-rw-r--r-- | packaging/nsis/logray-common.nsh | 126 |
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 |