From e5d1aaab07c866a00542c72387a2ff52f781d4ec Mon Sep 17 00:00:00 2001 From: Raul Metsma Date: Mon, 13 Apr 2026 10:52:38 +0300 Subject: [PATCH] Include new explorer shell extension IB-8832 Signed-off-by: Raul Metsma --- AppxManifest-ShellExt.xml.cmake | 52 +++++++++++++++++++ client/CMakeLists.txt | 5 +- extensions/windows/CMakeLists.txt | 35 +++++++++++++ extensions/windows/EsteidShellExtensionV2.cpp | 4 +- qdigidoc4.wxs | 42 ++++++++++++++- 5 files changed, 134 insertions(+), 4 deletions(-) create mode 100644 AppxManifest-ShellExt.xml.cmake diff --git a/AppxManifest-ShellExt.xml.cmake b/AppxManifest-ShellExt.xml.cmake new file mode 100644 index 000000000..24cfce6d5 --- /dev/null +++ b/AppxManifest-ShellExt.xml.cmake @@ -0,0 +1,52 @@ + + + + + DigiDoc4 Shell Extension + Riigi Infosüsteemi Amet + Assets\DigiDoc.50x50.png + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt index 6134800f4..065f0cdbd 100644 --- a/client/CMakeLists.txt +++ b/client/CMakeLists.txt @@ -224,18 +224,21 @@ elseif(WIN32) set(WIX_CMD wix.exe build -nologo -arch $ENV{PLATFORM} -ext WixToolset.UI.wixext + -ext WixToolset.Util.wixext -bv WixUIDialogBmp=${CMAKE_SOURCE_DIR}/common/dlgbmp.bmp -bv WixUIBannerBmp=${CMAKE_SOURCE_DIR}/common/banner.bmp -d ico_path=${CMAKE_CURRENT_SOURCE_DIR}/images/digidoc.ico -d libs_path=${LIBS_PATH} -d client_path=$ + -d shellext_v2=$ + -d shellext_msix=${CMAKE_BINARY_DIR}/${SHELLEXT_MSIX_FILE} -d qt_suffix=$<$:d> ${CMAKE_SOURCE_DIR}/${PROJECT_NAME}.wxs ${CMAKE_SOURCE_DIR}/common/WelcomeDlg.wxs ${CMAKE_SOURCE_DIR}/common/WixUI_Minimal.wxs ) get_filename_component(QT_BASE_DIR "${Qt6_DIR}/../../.." ABSOLUTE) - add_custom_target(msi DEPENDS ${PROJECT_NAME} + add_custom_target(msi DEPENDS ${PROJECT_NAME} msixshellext COMMAND ${WIX_CMD} -o "${MSI_FILE}.msi" #Build MSI with QT COMMAND ${WIX_CMD} -d qt_path=${QT_BASE_DIR}/bin -o "${MSI_FILE}.qt.msi" diff --git a/extensions/windows/CMakeLists.txt b/extensions/windows/CMakeLists.txt index c4bb27403..bc70c082a 100644 --- a/extensions/windows/CMakeLists.txt +++ b/extensions/windows/CMakeLists.txt @@ -59,6 +59,30 @@ add_custom_target(msishellext DEPENDS ${PROJECT_NAME} WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) +set(PLATFORM $ENV{PLATFORM}) +if(SIGNCERT) + execute_process( + COMMAND powershell -NoProfile -NonInteractive -Command + "(Get-ChildItem Cert:\\CurrentUser\\My | Where-Object { $_.Subject -like '*${SIGNCERT}*' } | Select-Object -First 1).Subject" + OUTPUT_VARIABLE SIGNCERT_SUBJECT + OUTPUT_STRIP_TRAILING_WHITESPACE + ) +endif() +configure_file(${CMAKE_SOURCE_DIR}/AppxManifest-ShellExt.xml.cmake ${CMAKE_BINARY_DIR}/AppxManifest-ShellExt.xml.in) +file(GENERATE OUTPUT ${CMAKE_BINARY_DIR}/AppxManifest-ShellExt.xml INPUT ${CMAKE_BINARY_DIR}/AppxManifest-ShellExt.xml.in) +set(SHELLEXT_MSIX_FILE "DigiDoc4Shell.msix") +set(SHELLEXT_MSIX_FILE ${SHELLEXT_MSIX_FILE} PARENT_SCOPE) + +add_custom_target(msixshellext DEPENDS ${PROJECT_NAME}V2 + COMMAND ${CMAKE_COMMAND} -E remove ${SHELLEXT_MSIX_FILE} + COMMAND ${CMAKE_COMMAND} -E remove_directory appxshell + COMMAND ${CMAKE_COMMAND} -E make_directory appxshell + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/AppxManifest-ShellExt.xml appxshell/AppxManifest.xml + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/Assets appxshell/Assets + COMMAND makeappx.exe pack /nv -d appxshell -p ${SHELLEXT_MSIX_FILE} + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} +) + if(SIGNCERT) if(CROSSSIGNCERT) target_link_options(${PROJECT_NAME} PRIVATE "/INTEGRITYCHECK") @@ -74,4 +98,15 @@ if(SIGNCERT) /tr http://timestamp.digicert.com /td SHA256 "${CMAKE_BINARY_DIR}/Digidoc_ShellExt-${VERSION}$ENV{VER_SUFFIX}.$ENV{PLATFORM}.msi" ) + add_custom_command(TARGET ${PROJECT_NAME}V2 POST_BUILD + COMMAND signtool.exe sign /a /v /s MY /n "${SIGNCERT}" /fd SHA256 /du http://installer.id.ee + "$<$:/ph;/ac;${CROSSSIGNCERT}>" + /tr http://timestamp.digicert.com /td SHA256 $ + COMMAND_EXPAND_LISTS + ) + add_custom_command(TARGET msixshellext POST_BUILD + COMMAND signtool.exe sign /a /v /s MY /n "${SIGNCERT}" /fd SHA256 /du http://installer.id.ee + /tr http://timestamp.digicert.com /td SHA256 + "${CMAKE_BINARY_DIR}/${SHELLEXT_MSIX_FILE}" + ) endif() diff --git a/extensions/windows/EsteidShellExtensionV2.cpp b/extensions/windows/EsteidShellExtensionV2.cpp index 9ec0b3d0e..6af142d55 100644 --- a/extensions/windows/EsteidShellExtensionV2.cpp +++ b/extensions/windows/EsteidShellExtensionV2.cpp @@ -92,10 +92,10 @@ struct EsteidShellExtension : public winrt::implementsGetItemAt(i, &psi); FAILED(hr)) return hr; - LPWSTR path; + LPWSTR path{}; auto hr = psi->GetDisplayName(SIGDN_FILESYSPATH, &path); psi->Release(); if(FAILED(hr)) diff --git a/qdigidoc4.wxs b/qdigidoc4.wxs index b002f491f..14fdfbab9 100644 --- a/qdigidoc4.wxs +++ b/qdigidoc4.wxs @@ -17,7 +17,8 @@ + xmlns:ui="http://wixtoolset.org/schemas/v4/wxs/ui" + xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util"> @@ -29,6 +30,43 @@ + + + + + + + + + + + + + @@ -68,6 +106,8 @@ + +