diff options
-rw-r--r-- | doc/scripting.qdoc | 64 | ||||
-rw-r--r-- | src/libs/installer/packagemanagercoredata.cpp | 24 |
2 files changed, 88 insertions, 0 deletions
diff --git a/doc/scripting.qdoc b/doc/scripting.qdoc index 64529867d..a6cb2526a 100644 --- a/doc/scripting.qdoc +++ b/doc/scripting.qdoc @@ -266,6 +266,27 @@ For example, \c {C:\Program Files} on Windows, \c {/opt} on Linux and \c {/Applications} on OS X. + + See also the table that lists examples of \l {Applications-directory-on-Windows} + {applications directories on Windows}. + \row + \li ApplicationsDirX86 + \li Applications Directory for 32 bit programs. This is useful on Windows, + on other platforms it is the same as \c ApplicationsDir. + + For example, \c {C:\Program Files (x86)} on Windows. + + See also the table that lists examples of \l {Applications-directory-on-Windows} + {applications directories on Windows}. + \row + \li ApplicationsDirX64 + \li Applications Directory for 64 bit programs. This is useful on Windows, + on other platforms it is the same as \c ApplicationsDir. + + For example, \c {C:\Program Files} on Windows. + + See also the table that lists examples of \l {Applications-directory-on-Windows} + {applications directories on Windows}. \row \li InstallerDirPath \li The directory that contains the installer application executable. @@ -297,4 +318,47 @@ component.addOperation("CreateShortcut", "@TargetDir@/MyApp.exe", "@StartMenuDir@/MyApp.lnk"); } \endcode + + + \target Applications-directory-on-Windows + For example, applications directory on Windows: + \table + \header + \li OS (Windows) + \li Qt Installer Framework + \li Variable + \li Example Path + \row + \li {1, 3} 32bit + \li {1, 3} 32bit + \li ApplicationsDir + \li \c {C:\Program Files} + \row + \li ApplicationsDirX86 + \li \c {C:\Program Files} + \row + \li ApplicationsDirX64 + \li \c {C:\Program Files} + \row + \li {1, 6} 64bit + \li {1, 3} 32bit + \li ApplicationsDir + \li \c {C:\Program Files (x86)} + \row + \li ApplicationsDirX86 + \li \c {C:\Program Files (x86)} + \row + \li ApplicationsDirX64 + \li \c {C:\Program Files} + \row + \li {1, 3} 64bit + \li ApplicationsDir + \li \c {C:\Program Files} + \row + \li ApplicationsDirX86 + \li \c {C:\Program Files (x86)} + \row + \li ApplicationsDirX64 + \li \c {C:\Program Files} + \endtable */ diff --git a/src/libs/installer/packagemanagercoredata.cpp b/src/libs/installer/packagemanagercoredata.cpp index 3444e0247..84944ee3d 100644 --- a/src/libs/installer/packagemanagercoredata.cpp +++ b/src/libs/installer/packagemanagercoredata.cpp @@ -119,6 +119,30 @@ void PackageManagerCoreData::setDynamicPredefinedVariables() #endif m_variables.insert(QLatin1String("ApplicationsDir"), dir); + QString dirX86 = dir; + QString dirX64 = dir; +#ifdef Q_OS_WIN + QSettingsWrapper current(QLatin1String("HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion") + , QSettingsWrapper::NativeFormat); + BOOL onWow64Or64bit = TRUE; +#ifndef Q_OS_WIN64 + IsWow64Process(GetCurrentProcess(), &onWow64Or64bit); +#endif + QString programfilesX86; + QString programfilesX64; + if (onWow64Or64bit == TRUE) { + programfilesX86 = current.value(QLatin1String("ProgramFilesDir (x86)"), QString()).toString(); + programfilesX64 = current.value(QLatin1String("ProgramW6432Dir"), QString()).toString(); + } else { + programfilesX86 = current.value(QLatin1String("ProgramFilesDir"), QString()).toString(); + programfilesX64 = programfilesX86; + } + dirX86 = replaceWindowsEnvironmentVariables(programfilesX86); + dirX64 = replaceWindowsEnvironmentVariables(programfilesX64); +#endif + m_variables.insert(QLatin1String("ApplicationsDirX86"), dirX86); + m_variables.insert(QLatin1String("ApplicationsDirX64"), dirX64); + #ifdef Q_OS_WIN QSettingsWrapper user(QLatin1String("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\" "CurrentVersion\\Explorer\\User Shell Folders"), QSettingsWrapper::NativeFormat); |