Let's talk custom installers

I know many developers in this community write custom installers or script installation of ZXPs.

With the addition of UXP command line installation support, I want to start a thread about how you plan to add UXP plugins to your installation flows.

If you’ve been using UPIA (previously ExManCmd) for installation, you can now write something to install both a CCX and a ZXP for your end Photoshop users.

But how does that actually look?

Some installers I’ve heard of work something like this, here’s my pseudo code:

// Check for the presence of my plugin
cd “/Library/Application Support/Adobe/Adobe Desktop Common/RemoteComponents/UPI/UnifiedPluginInstallerAgent/UnifiedPluginInstallerAgent.app/Contents/MacOS”
./UnifiedPluginInstallerAgent --list all

// Run a search for my plugin name
// grep?

// If my plugin isn't installed, install it
./UnifiedPluginInstallerAgent --install ./UnifiedPluginInstallerAgent --install /filepath/to/myplugin.ccx

// Check to make sure my plugin installed successfully
// Or capture the error message
./UnifiedPluginInstallerAgent --list all

If you’re willing to share your command line installation methods, please let us know how you do it.


I got from an InDesign developer recently. Their workflow was signing CEP plugins, then unzipping the ZXP and moving the files to the correct folders (they also have C++ components as well). They had never used ExManCmd or any other installer…

Please note that the above method of installation isn’t supported in UXP, you must use UPIA for that kind of installation, or some combination of double-click installation, to enure a certain database file gets updated.

Likewise, the ZXP installation “fix” in this youtube video won’t work with UXP: Fix Installation Failed because the extension is not compatible Error in ZXP installer - YouTube

OK so, nobody responded to this thread. However, it is increasingly important.

It turns out that if you run UPIA --list all in a logged out state, you get an error. I got:

Request failed with status = -641

If you run ExManCmd 7.11.1 while logged out you get:

Failed to get extension count of product status = -503!

This seems to be by design, but it breaks the custom installer workflow… I’m off to open a request to fix it. If you got this error and wound up here, please do chime in and let us know.

For CEP I am using: Inno Setup . It always work very well and unlike .zxp and Adobe tools I had never problem with it. It comes with uninstaller it can check whether already installed in system, change registry if needed, ask to quit Photoshop and anythink I could possibly need on Windows.


Same here. InnoSetup and building pkg files for Mac. But only because i need to provide presets and profiles with my plugins. And going down the innosetup/pkg route means running into extra costs because of Gatekeeper/Windows Defender. Would love to see a solution from Adobe here.

Yes. If you are new in custom installers it adds few weeks of development. So I am glad that in case of UXP this is not needed in most of the cases.

The one I have always liked for Windows was https://www.actualinstaller.com/
and the one for MAC was Packages

1 Like

Note to self: https://jira.corp.adobe.com/browse/EXCH-4212961

Hey Erin, we install and update ZXP extensions with ExManCmd using the --remove (if an update) and --install flags. Currently only to After Effects and Premiere.

We are now looking at migrating to UPIA from ExMan. In the past we’ve had some reported issues using ExMan, and I’m weighing the benefits of moving to UPIA (and still getting user error reports, e.g. -641) vs moving to the method you first described and just signing the plugin, and unzipping the zxp to the correct file path.

Since we deal solely with ZXP installers, are there any benefits to using UPIA over this ‘manual’ installation method?

Hi @Cam, welcome to the forums!

The main benefit of moving to UPIA is that in the long term products will stop supporting ExManCmd as an installer. Eventually there will be a maximum version of After Effects and Premiere recognized by ExManCmd.

The rest depends on your end users and use cases… Are your end users are installing your extensions in environments where they are offline, or don’t use the Creative Cloud Desktop app? If your users do log in to the Creative Cloud Desktop app, are your extensions installed before a user has ever logged in (like in a computer lab?)?

Thanks for the response! That makes sense to me. We’re definitely going to migrate off of ExMan, just not sure if we want to use UPIA or the ‘manual’ method. I would say the majority of our users have the CC desktop app, with some exceptions in enterprise environments and computer labs, as you mentioned. Perhaps we could use UPIA and fall-back to a manual method if that fails for some reason.

With the manual method of distributing a zxp and unzipping it to the .../CEP/extensions folder, are there any additional steps we’d have to consider? E.g. I recall having to write PlayerDebugMode but I believe that was only for unsigned extensions. Is there anything UPIA does behind the scenes for ZXP installs that we’d have to do as well for the manual method?

So, I think you’ll only run into trouble if your end users are simultaneously installing your extension and other products from the Exchange Marketplace (now available in the Creative Cloud desktop app), because UPIA and ExManCmd write to different database files when they install. UPIA or UPI is installed with and runs behind the scenes of the Creative Cloud desktop app.

It’s possible users could run into weird conflicts because of the conflicting database files.

The other issue that you might run into a couple of years down the road is that in UPI-land or the UXP future, I don’t think “side loading” will be allowed… but then, that depends on the host apps in question and how UXP evolves. Based on having met Premiere developers I suspect they might specifically allow side-loading even if other apps do not.

In a best-case scenario future, Premiere and After Effects enable UXP you’ll be able to write nifty .CCX files that can be installed with a double-click (and they don’t need not be signed using ZXPCmd).

Do your ZXPs also include like, EXE and DMG files or other things like files or templates that go into specific directories?

@Erin_Finnegan looks like the problem is just that ‘Export_CEP.zxp’ file exists, but the error message definitely could be more user-friendly.

It sounds like you figured it out… I agree that the error codes are vague.

I’m curious about your use case, why do you need to sign and re-install so often?

Thanks for the quick response in the weekend! The panel is for company internal usage with just a few users and it needs to be repackaged / installed after nearly every submission.

@Erin_Finnegan gotcha - that all makes sense to me!

We do package our zxps with additional assets including an executable file, images, ffx files, etc., but they all stay in the extensions/<plugin-name> folder

Hi @Erin_Finnegan - that’s true with -641 - you have to be logged in to get rid of errors.
But we stuck in case:
Case 1: ZXP, no sudo, CCD is running - user is logged in, UPIA --list all, remove, install returns randomly -641.
Attempt 1: restart CCD - still -641.
Attempt 2: try to update CCD - sometimes fixes or not.
Attempt 3: restart OS - often it fixes -641, but I saw a single case that didn’t help.

What I found that during problems with -641 we found that UPISys.db is almost empty.
Any clue will be welcome to my team.


Hi @jerzy_a,

Have your users that are facing these issues collect their logs, using these instructions: Find solutions for installation issues with Creative Cloud app extensions and plugins

Then, share the log file and the UPISys.db file with me at finnegan@adobe.com (and possibly also DM me in the forum letting me know you emailed because the spam filter is super aggressive).

I have found the following:

  • Sometimes restarting the machine clears up problems even if updating CCD did not.
  • If your log files are over 100 MB (like mine were), you can clean out the entire log folder, restart the machine, and the logs will be much smaller:

Creative Cloud applications use various subdirectories of /Users//Library/Logs/ as well as creating files directly within it, so the simplest thing to do is empty it entirely (having closed all running applications, to avoid stepping on any open files).
macos - Is it safe to delete the content of ~/Library/Logs? - Ask Different

Hi @Erin_Finnegan,

Before we share our logs, I got examples from coworker’s computer:

Those commands were fired for 10 seconds, and he got his new computer exactly 1st of the August. So he got almost everything new. For same experience, we did it without installed plugins and I clean as much as possible from ~/Library/Logs/*. We use the latest CC version,, and it’s running during tests.

Before a restart, I saw a chance that 30-50% finished with ‘-641’ and after a restart 5%-10% with ‘-641’.

PS: I have request is there any problem to would UPIA returns exit code on error? Wonderfully would be if it returns same code as stated error, but if this is impossible, ‘1’ with any error will be enough.

1 Like

I’ve forwarded this along to the engineering team…

This is a great request, I think it would really help!