aboutsummaryrefslogtreecommitdiff
path: root/src/main/oshelper.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/oshelper.cpp')
-rw-r--r--src/main/oshelper.cpp45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/main/oshelper.cpp b/src/main/oshelper.cpp
index 75c668f5..c4923f35 100644
--- a/src/main/oshelper.cpp
+++ b/src/main/oshelper.cpp
@@ -27,6 +27,7 @@
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "oshelper.h"
+#include <QCoreApplication>
#include <QFileDialog>
#include <QStandardPaths>
#include <QTemporaryFile>
@@ -164,3 +165,47 @@ QString OSHelper::temporaryPath() const
{
return QDir::tempPath();
}
+
+bool OSHelper::installed() const
+{
+#ifdef Q_OS_WIN
+ static constexpr const wchar_t installKey[] =
+ L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Monero GUI Wallet_is1";
+ static constexpr const wchar_t installValue[] = L"InstallLocation";
+
+ DWORD size;
+ LSTATUS status =
+ ::RegGetValueW(HKEY_LOCAL_MACHINE, installKey, installValue, RRF_RT_REG_SZ, nullptr, nullptr, &size);
+ if (status == ERROR_FILE_NOT_FOUND)
+ {
+ return false;
+ }
+ if (status != ERROR_SUCCESS)
+ {
+ qCritical() << "RegGetValueW failed (get size)" << status;
+ return false;
+ }
+
+ std::wstring installLocation;
+ installLocation.resize(size / sizeof(std::wstring::value_type));
+ size = installLocation.size() * sizeof(std::wstring::value_type);
+ status = ::RegGetValueW(
+ HKEY_LOCAL_MACHINE,
+ installKey,
+ installValue,
+ RRF_RT_REG_SZ,
+ nullptr,
+ &installLocation[0],
+ &size);
+ if (status != ERROR_SUCCESS)
+ {
+ qCritical() << "RegGetValueW Failed (read)" << status;
+ return false;
+ }
+
+ const QDir installDir(QString(reinterpret_cast<const QChar *>(&installLocation[0])));
+ return installDir == QDir(QCoreApplication::applicationDirPath());
+#else
+ return false;
+#endif
+}