[osgeo4w-dev] [osgeo4w] #888: Detection of QGIS install (via OSGeo4W installer) for mass deployment
OSGeo4W
trac_osgeo4w at osgeo.org
Mon Jun 30 06:22:31 PDT 2025
#888: Detection of QGIS install (via OSGeo4W installer) for mass deployment
---------------------------+----------------------------
Reporter: ascottwwf | Owner: osgeo4w-dev@…
Type: enhancement | Status: new
Priority: normal | Component: Package
Version: | Resolution:
Keywords: QGIS detection |
---------------------------+----------------------------
Comment (by ascottwwf):
Thanks Both,
Although this solution doesn't meet the exact requirements layed out above
- I'd have preferred a File Version attribute being addded to one or more
key executables or DLLs like this example of the 7-Zip File manager
(`7zFM.exe`):\\
{{{
Get-ChildItem "C:\Program Files\7-Zip\7zFM.exe" -Recurse -Force
-ErrorAction SilentlyContinue | Select-Object * -ExpandProperty
versioninfo | Sort-Object ProductVersion,FileVersionRaw,Filename | Select-
Object
ProductVersion,FileVersionRaw,Filename,FileDescription,CompanyName,LegalCopyright
| ft -AutoSize
ProductVersion FileVersionRaw FileName
FileDescription CompanyName LegalCopyright
-------------- -------------- --------
--------------- ----------- --------------
24.09 24.9.0.0 C:\Program Files\7-Zip\7zFM.exe 7-Zip File
Manager Igor Pavlov Copyright (c) 1999-2024 Igor Pavlov
}}}
But, I had overlooked the fact that Intune has a ''`'use a custom
detection script'`'' option.\\
So thanks for your guidance, I have added a piece of code to my packaging
script that will auto-generate a PowerShell QGIS detection script each
time a new version is detected, which injects the value for the QGIS
latest version at the begining of the script (Currently 3.40.8).\\
This detection script confirms the version being deployed has successfully
been installed (by matching the `$LatestVersion` variable and the version
found on the line begining 'qgis-ltr qgis-ltr-') within the `installed.db`
file.\\
N.B. `exit 0` returns success to Intune and `exit 1` returns failure to
Intune\\
This means I have a repeatable method to detect newly deployed versions
(so long as the path to (or the structure of) the `installed.db` file
doesn't change)
In case you are interested, here is my script:
{{{
$LatestVersion = "3.40.8"
# Define path to installed.db
$installedDbPath = "C:\Program Files\OSGeo4W_v2\etc\setup\installed.db"
# Verify file exists
if (-Not (Test-Path -Path $installedDbPath)) {
Write-Output "installed.db not found at $installedDbPath"
exit 1
}
# Read installed.db and find the line that starts with 'qgis-ltr qgis-
ltr-'
$qgisLine = Get-Content -Path $installedDbPath | ForEach-Object {
$_.Trim() } | Where-Object { $_ -match "^qgis-ltr qgis-ltr-" }
if (-not $qgisLine) {
Write-Output "QGIS LTR version not found"
exit 1
}
# Extract the version string using regex
if ($qgisLine -match "^qgis-ltr qgis-ltr-([\d\.]+)-\d+\.tar\.bz2") {
[version]$InstalledVersion = $matches[1]
Write-Output "QGIS LTR version detected: $InstalledVersion"
If([version]$InstalledVersion -ge [version]$LatestVersion){
Write-Output "SUCCESS :: Latest Version $($LatestVersion)
Installed"
exit 0
} else {
Write-Output "FAILURE :: Latest Version $($LatestVersion) Not
Installed"
exit 1
}
} else {
Write-Output "Unable to parse QGIS LTR version from line: $qgisLine"
exit 1
}
}}}
Feel free to close this ticket, as I can work with this.
Thanks again
--
Ticket URL: <https://trac.osgeo.org/osgeo4w/ticket/888#comment:4>
OSGeo4W <http://trac.osgeo.org/osgeo4w>
OSGeo4W is the Windows installer and package environment for the OSGeo stack.
More information about the osgeo4w-dev
mailing list