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 @@
+
+