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

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%:

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

For more details, see the Installer 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 for details.