Title
Create new category
Edit page index title
Edit category
Edit link
System-wide and Per-user Installed Detection on Windows
Overview
OESIS Framework now supports detecting across system-wide and per-user installations on Windows endpoints by introducing a new parameter to the DetectProducts method and extending GetVersion method.
Key concept
To better understand the detection results, OESIS categorizes Windows installations into two types:
System-wide Installation: The product is installed in a common location (e.g.,
C:\Program Files) and is available to all users on the endpoint. In theinstancesoutput, these are identified by the value"System Wide Instance".Per-user Installation: The product is installed specifically for a single user profile (e.g.,
%LocalAppData%). These instances are only accessible when that specific user is logged in. In theinstancesoutput, these are identified by the user's account name (e.g.,DOMAIN\username).
Prerequisites and Scope
Platform: Windows only.
Methods involved:
DetectProducts(Method ID:0)GetVersion(Method ID:100)
Permissions:
Elevated privileges (e.g., administrator or system service) are required for detecting per-user products of all users, and may be required for GetVersion as well to target a specific per-user
instance_id.
Backward compatibility: If you do not use the new parameter,
DetectProductsbehaves as in previous versions.
Enabling Detection for installed products of every user in DetectProducts
New Input Parameter: detect_all_users_products
Name:
detect_all_users_productsType:
booleanRequired: No (Optional)
Applies to: Windows only
Default behavior: If omitted or set to
false,DetectProductsbehaves exactly as it did before: checking system-wide install locations plus the hive of the user account making the call. It does not check any other user's profile, and the output has noinstancesfield.
When detect_all_users_products is set to true:
OESIS attempts to detect, for every user profile on the endpoint (not just the caller's), whether that user has the product installed, including:
System‑wide installations.
Per‑user installations for all user profiles, not just the current user.
The detection results are consolidated:
Only one signature is returned for each product.
A new
instancesobject appears in the method output under each detected product to provide a per‑instance breakdown.
Important
Detecting product for all users typically requires elevated privileges (for example, administrator or system service). Without appropriate permissions, OESIS may return WAAPI_ERROR_ACCESS_DENIED.
A minimal example request on Windows might look like:
You can continue to use all other existing DetectProducts input fields as before; only the new detect_all_users_products flag is added.
Output Changes: The instances Field
When detect_all_users_products is enabled on Windows, each product in returned detected_products may include an instances field:
Field:
detected_products[].instancesType: object (key-value map)
Presence: Only appears when
detect_all_users_productsis specified in the request (Windows).
Each entry inside instances has the form:
The key (
<instance_id>) is an opaque identifier for that installed instance.The value describes who owns the instance, could be:
"System Wide Instance"
→ The product is installed system‑wide for all users.domain and username in format
DOMAIN\\samAccountName
→ The product is installed for a specific Windows user account
(for example,DESKTOP-M85K9UP\\HMorLOCAL\\test).
Additionally, when detect_all_users_products is true, because a result is now merged across multiple users, display_name returns "n/a" and uninstall_hive returns [] (even if show_uninstall_hive is true) for every product.
Example Windows output with system‑wide and per‑user instances:
In this example:
One product entry (GIMP 3+) is returned.
The
instancesobject shows:A system‑wide installation.
Separate installations for three specific user accounts on the same machine.
Technical Note
The instance_id is a hash computed from the owning identity. It stays the same for the same owner across separate DetectProducts calls, as long as that user's domain/username doesn't change. Treat it as an identifier that:
Comes from
DetectProducts, andIs later used with
GetVersionto query the version of that specific instance.
Query the Version of a Specific Instance with GetVersion
This section explains how to use GetVersion together with the instance_id returned by DetectProducts to retrieve version information for a specific installation instance on Windows (system‑wide or per‑user).
Cross‑platform note
instance_id field in GetVersion is not new globally. It has been introduced for macOS and Linux to distinguish multiple instances of the same product for one user (different install paths).
With this update, Windows now also supports instance_id, but for a different context.
An example input structure for GetVersion with instance_id on Windows might look like:
Where:
method:100(representsGetVersion).signature: The product signature returned byDetectProducts.instance_id: A string obtained directly fromdetected_products[].instancesin theDetectProductsresult.
Note
The same GetVersion method can evaluate both system‑wide and per‑user instances because DetectProducts normalizes per‑user signatures to the system-preferred signature (if exists).
Example Workflow with DetectProducts and GetVersion
Use the following pattern to obtain per‑instance version details:
Run
DetectProductswith multi‑user detection (Windows)Set
detect_all_users_products = truein yourDetectProductsrequest.Ensure the process runs with appropriate privileges to see all user installations.
Locate the target product and its instances
Indetected_products, find the desired product and inspect theinstancesmap, for example:"instances": { "2a334bf63929cf983eece4a9e998361f": "DESKTOP-M85K9UP\\UserA", "4865499167ce5f271a7c65d1ba878290": "DESKTOP-M85K9UP\\UserB", "8edd6b29b9c9c01294202c096ddb2b26": "System Wide Instance" }912345Select an
instance_id
Choose the key that corresponds to the instance you care about:A specific user (e.g.,
"2a334bf63929cf983eece4a9e998361f"→DESKTOP-M85K9UP\\UserA).Or the system‑wide instance (
"8edd6b29b9c9c01294202c096ddb2b26"→System Wide Instance).
Call
GetVersionwithsignatureandinstance_id
Use the product’ssignaturefromDetectProductsand the selectedinstance_id:{ "input": { "method": 100, "signature": 4032, "instance_id": "2a334bf63929cf983eece4a9e998361f" } }91234567Read the version result for that instance
GetVersionreturns the same output structure as before.The difference is that the data now specifically corresponds to the selected instance (that user or system‑wide installation).
If Further Assistance is required, please proceed to log a support case or chatting with our support engineer.