# \[FAQ\] Deploying io.Connect Desktop silently to machines when no user is logged in

**URL:** <https://community.interop.io/t/faq-deploying-io-connect-desktop-silently-to-machines-when-no-user-is-logged-in/619>\
**Category:** io.Connect Desktop\
**Tags:** FAQs, iocd-9\
**Created:** [July 9, 2026, 8:35am UTC](https://community.interop.io/t/faq-deploying-io-connect-desktop-silently-to-machines-when-no-user-is-logged-in/619 "2026-07-09T08:35:32Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![toni.petrov](https://yyz2.discourse-cdn.com/flex028/user_avatar/community.interop.io/toni.petrov/32/17_2.png) [@toni.petrov](https://community.interop.io/u/toni.petrov)\
**Post date:** [July 9, 2026, 8:35am UTC](https://community.interop.io/t/faq-deploying-io-connect-desktop-silently-to-machines-when-no-user-is-logged-in/619/1 "2026-07-09T08:35:32Z")

</div>

**Applies to:** io.Connect Desktop 9.x (installer + `extensibility.json` model). See the note at the end for io.Connect Desktop 10.0+.

* * *

## Q: Why the installation only works when a user is actively logged in?

When you push io.Connect Desktop to machines with a remote software deployment tool (for example, PDQ Deploy), the deployment may fail or hang if it runs while no user is logged in, or while a user is logged in but disconnected from the session.

By default, io.Connect Desktop installs into the user profile - under `%LOCALAPPDATA%\interop.io\io.Connect Desktop`. Because the default path depends on a per-user environment variable (`%LOCALAPPDATA%`), it resolves against the profile of the account running the installer and the remote push only goes through when a user was actively logged in.

This can be solve by installing to a machine-wide location instead → predefine the installation path when you customize the installer, so it does not use the user profile or environment variables such as `%LOCALAPPDATA%`.

In io.Connect Desktop 9.x, you set this with the `"context"` extensibility point in your installer’s extensibility configuration. For example, to install under `%ProgramFiles%`:

```json
{
    "context": [
        {
            "type": "setValue",
            "args": {
                "name": "Path",
                "value": "%ProgramFiles%/MyCustomProduct"
            }
        }
    ]
}

```

For more details, see the [Installer](https://docs.interop.io/desktop/getting-started/how-to/rebrand-io-connect/installer/index.html#installation-location) section of the io.Connect Desktop documentation.

## Note for io.Connect Desktop 10.0+

Starting with io.Connect Desktop 10.0, the packaging model changed: the platform is provided as publicly accessible components that you configure, customize, and package as installable artifacts or as a bundle (ZIP archive) via the seed project.

Relevant to the post-install step described above, io.Connect Desktop **10.0.4** added support for executing custom install and uninstall tasks via command-line triggers. See the [io.Connect Desktop 10.0.4 changelog](https://docs.interop.io/desktop/getting-started/changelog/10-0-4/index.html) for details.
