From ac22743f214fcb8ecd83808db222fdee85f59e32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Thu, 25 Aug 2022 14:07:11 +0200 Subject: [PATCH] Windows: Add helper function to check if the app has a package identity MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Having a package identity is required to use many modern Windows APIs. https://docs.microsoft.com/en-us/windows/apps/desktop/modernize/modernize-packaged-apps Change-Id: Ib08dbdce97cb082fa1664df815457dbee82dd3b9 Reviewed-by: MÃ¥rten Nordheim --- src/corelib/kernel/qfunctions_win.cpp | 36 +++++++++++++++++++++++++++ src/corelib/kernel/qfunctions_win_p.h | 4 ++- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/corelib/kernel/qfunctions_win.cpp b/src/corelib/kernel/qfunctions_win.cpp index ca72c395a9a..ed0e25467c2 100644 --- a/src/corelib/kernel/qfunctions_win.cpp +++ b/src/corelib/kernel/qfunctions_win.cpp @@ -3,9 +3,16 @@ #include "qfunctions_win_p.h" +#include + #include #include +#if __has_include() +# include +# define HAS_APPMODEL +#endif + QT_BEGIN_NAMESPACE QComHelper::QComHelper(COINIT concurrencyModel) @@ -25,4 +32,33 @@ QComHelper::~QComHelper() CoUninitialize(); } +/*! + Checks if the application has a \e{package identity} + + Having a \e{package identity} is required to use many modern + Windows APIs. + + https://docs.microsoft.com/en-us/windows/apps/desktop/modernize/modernize-packaged-apps +*/ +bool qt_win_hasPackageIdentity() +{ +#if defined(HAS_APPMODEL) + static const bool hasPackageIdentity = []() { + UINT32 length = 0; + switch (const auto result = GetCurrentPackageFullName(&length, nullptr)) { + case ERROR_INSUFFICIENT_BUFFER: + return true; + case APPMODEL_ERROR_NO_PACKAGE: + return false; + default: + qWarning("Failed to resolve package identity (error code %ld)", result); + return false; + } + }(); + return hasPackageIdentity; +#else + return false; +#endif +} + QT_END_NAMESPACE diff --git a/src/corelib/kernel/qfunctions_win_p.h b/src/corelib/kernel/qfunctions_win_p.h index 46c4bfa9fee..540405bd2f7 100644 --- a/src/corelib/kernel/qfunctions_win_p.h +++ b/src/corelib/kernel/qfunctions_win_p.h @@ -17,7 +17,7 @@ #include -#if defined(Q_OS_WIN) +#if defined(Q_OS_WIN) || defined(Q_QDOC) #if !defined(QT_BOOTSTRAPPED) #include @@ -41,6 +41,8 @@ private: HRESULT m_initResult = E_FAIL; }; +Q_CORE_EXPORT bool qt_win_hasPackageIdentity(); + QT_END_NAMESPACE #endif // Q_OS_WIN