nicolasf
Posts: 15
Joined: Mon Mar 02, 2015 4:17 pm

Your project must contain at least one component before this operation can be performed.

Hello,
We have products of which the user can choose between per-machine and per-user. For example, we have Product A and Product B. The user can choose between Product A per-machine and Product A per-user. The same applies to Product B.

One difference between per-machine and per-user products is that the per-machine product includes a Windows service (let's say an upgrade service) while the per-user includes a standalone upgrade application.

For historical reasons we have been including these products in a per-machine .aip and a per-user .aip. We add the components required by Product A and Product B per-machine to the per-machine .aip and the components required by Product A and Product B per-user to the per-user .aip (even on the same feature!).

Even worse, we have four .aip's; per-machine .aip, per-machine upgrade .aip, per-user .aip and per-user upgrade .aip.

per-machine .aip and per-machine upgrade .aip outputs a Single MSI while per-user .aip and per-user upgrade .aip outputs a Single EXE setup. The difference between non-upgrade and upgrade .aip's is that we skip checks in upgrade builds (like prerequisites), we provide a different UX, etc.

When Product A changes for some reason (let's say we need to include a new file in the installation) we have to modify per-machine .aip, per-user .aip and then replicate the changes in per-machine upgrade .aip and per-user upgrade .aip, which is crazy.

To solve this problem we decided to create merge modules. We have Product A per-machine and Product A per-user merge modules, and Product B per-machine and Product B per-user merge modules. This way we get some benefits like each product team can work on their merge modules and they only need to update two merge modules. We then have to merge the modules into the "main" four .aip's.

Do you think there is a better way to solve the problem? As a side note we are working on getting rid of the upgrade .aip's so we could end up with two main .aip's instead of four.

So we went to Advanced Installer, cleaned the .aip's, added the merge modules to each .aip and built the .aip's but we found that the per-machine .aip's, which output a .msi, did not build. We got "Your project must contain at least one component (file, registry entry, etc.) before this operation can be performed.". This makes sense because we did not include components directly into the per-machine .aip's. However after the merge the package will end up with components.

Is there a way to avoid the error without having to add a dummy component?

Do you think that our approach is correct?

We may be overlooking some Advanced Installer functionality that could help with our complexity. We have Advanced Installer Enterprise.

Thanks,
Nicolás.
nicolasf
Posts: 15
Joined: Mon Mar 02, 2015 4:17 pm

Re: Your project must contain at least one component before this operation can be performed.

Also we are using LZMA compression and we get "Creating LZMA archive... error. Your project must contain at least one file before this operation can be performed.".
Eusebiu
Posts: 4931
Joined: Wed Nov 14, 2012 2:04 pm

Re: Your project must contain at least one component before this operation can be performed.

Hi Nicolás,
Also we are using LZMA compression and we get "Creating LZMA archive... error. Your project must contain at least one file before this operation can be performed." Is there a way to avoid the error without having to add a dummy component?.
I'm afraid that this is the normal behavior when the "Archive installation files using LZMA compression" option from the "Builds" page is used. At least one file should be added to the project and this cannot be avoided.
Do you think there is a better way to solve the problem? As a side note we are working on getting rid of the upgrade .aip's so we could end up with two main .aip's instead of four.
Another way to achieve this is by using multiple builds. So, you can go in the "Builds" page and add another build to the same project then choose which files and features you want to add to that build.

For more details you can take a look on the Branding the installer thread and you can watch the Multiple Builds Configuration video.

Let us know if this helped, otherwise give us more details about your scenario.

Best regards,
Eusebiu
Eusebiu Aria - Advanced Installer Team
Follow us: Twitter - Facebook - YouTube
nicolasf
Posts: 15
Joined: Mon Mar 02, 2015 4:17 pm

Re: Your project must contain at least one component before this operation can be performed.

Hi Eusebiu,
What about "We got "Your project must contain at least one component (file, registry entry, etc.) before this operation can be performed."."?

Thanks,
Nicolás.
Eusebiu
Posts: 4931
Joined: Wed Nov 14, 2012 2:04 pm

Re: Your project must contain at least one component before this operation can be performed.

Hi Nicolás,

As I already mentioned, this is the normal behavior when the LZMA compression is used. This option cannot be used on a project that contains no file. The only way to get rid of this message is to add at least one file to the project or to not use the LZMA compression anymore.

Best regards,
Eusebiu
Eusebiu Aria - Advanced Installer Team
Follow us: Twitter - Facebook - YouTube
nicolasf
Posts: 15
Joined: Mon Mar 02, 2015 4:17 pm

Re: Your project must contain at least one component before this operation can be performed.

Hi Eusebiu,
Please, read my original post.

"So we went to Advanced Installer, cleaned the .aip's, added the merge modules to each .aip and built the .aip's but we found that the per-machine .aip's, which output a .msi, did not build. We got "Your project must contain at least one component (file, registry entry, etc.) before this operation can be performed.". This makes sense because we did not include components directly into the per-machine .aip's. However after the merge the package will end up with components."

This happens regardless of whether we use LZMA compression or not.

-Nicolás.
nicolasf
Posts: 15
Joined: Mon Mar 02, 2015 4:17 pm

Re: Your project must contain at least one component before this operation can be performed.

I have created two simple Advanced Installer projects to show you the issue we are running into.

You can build "Your Merge Module.aip" first and then try to build "Your Application.aip".

-Nicolás.
Attachments
Eusebiu.zip
(12.7 KiB) Downloaded 271 times
Eusebiu
Posts: 4931
Joined: Wed Nov 14, 2012 2:04 pm

Re: Your project must contain at least one component before this operation can be performed.

Hi Nicolás,

Sorry for my misunderstanding. This warning is, indeed, not related to the LZMA compression option. It appears when no component exist in the project.

Even if the project contains a merge module, it will be verified and merged to the project at build time, so that error is still thrown if no component is contained by the project itself.

Best regards,
Eusebiu
Eusebiu Aria - Advanced Installer Team
Follow us: Twitter - Facebook - YouTube
nicolasf
Posts: 15
Joined: Mon Mar 02, 2015 4:17 pm

Re: Your project must contain at least one component before this operation can be performed.

Is not this an Advanced Installer limitation and therefore something you may want to consider overcome in the near future?
Eusebiu
Posts: 4931
Joined: Wed Nov 14, 2012 2:04 pm

Re: Your project must contain at least one component before this operation can be performed.

Hi Nicolás,

Indeed, this seems to be an Advanced Installer limitation. I added this improvement on our TODO list and it will be available in a future version of Advanced Installer. Thank you for your suggestion.

Best regards,
Eusebiu
Eusebiu Aria - Advanced Installer Team
Follow us: Twitter - Facebook - YouTube
nicolasf
Posts: 15
Joined: Mon Mar 02, 2015 4:17 pm

Re: Your project must contain at least one component before this operation can be performed.

Thanks for your help, Eusebiu!

-Nicolás.
Eusebiu
Posts: 4931
Joined: Wed Nov 14, 2012 2:04 pm

Re: Your project must contain at least one component before this operation can be performed.

You're welcome Nicolás.

Just let us know anytime you need help.

Best regards,
Eusebiu
Eusebiu Aria - Advanced Installer Team
Follow us: Twitter - Facebook - YouTube
Catalin
Posts: 6586
Joined: Wed Jun 13, 2018 7:49 am

Re: Your project must contain at least one component before this operation can be performed.

Hello,

This improvement has been added in version 17.2 of Advanced Installer, released on June 30th, 2020.

Best regards,
Catalin
Catalin Gheorghe - Advanced Installer Team
Follow us: Twitter - Facebook - YouTube

Return to “Building Installers”