cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
DenisMolodtsov
Kudo Kingpin
Kudo Kingpin

Power App Solution Package - Extract and Re-ZIP Programmatically

Hello dear community members. I really need your help figuring out Power Apps / Power Automate Solution Packages work. I can't figure how to to generate a proper ZIP solution that is understood by the Power Platform during the import process.

 

What I am trying to do

  1. Manually. Export a solution that contains Power Apps, Power Automate as a ZIP file. 
  2. Unzip the ZIP file programmaticaly.
  3. Perform a minor change in several unzipped files. 
  4. ZIP up the files back to a solution programmatically, using PowerShell,
  5. Import Solution (zip) file to a new/same environment.

3_Import package.png

 

I have an issue with the Step #4 - Zipping the solution files back to a solution file. To be more specific, the issue is in the step #5. When I generate a ZIP file programmatically, Step #5 fails. When I create a ZIP file manually (see screenshot below) - Step #5 succeeds.

 

Experiment A) If we manually create a solution file, then Step #5 works as expected: I can import a solution file with no issues:

1_Manual Zipping.png

Manually Zip solution file is imported perfectly fine:
DenisMolodtsov_0-1599966170892.png

Experiment B) However, I am trying to automate the entire process and do not want to manually ZIP anything. So, I am ZIPping the solution files using PowerShell:

 

2_PowerShell zipping.jpg

As a result of running this PowerShell script, I get a ZIP solution file. It looks completely valid and I don't see any issues with it.

So, now, I am trying to import this solution file via https://make.powerapps.com/, but this time I get an error:

 

Solution "ContosoSolution" failed to import: Error while importing workflow {ed432f3c-6ee6-ea11-a817-000d3af41a7c} type ModernFlow name PowerApp -> Get items: Workflow import: Xaml file is missing from import zip file: FileName: /Workflows/PowerApp-Getitems-ED432F3C-6EE6-EA11-A817-000D3AF41A7C.json

 

This is what the solution import log contains:

5_Error Log.png


According to the error, the solution ZIP file is missing a /Workflows/....json file. This error seems to be misleading, because the ZIP file does contain this file:

 

10_Workflows.png



Question how can I generate a solution file programmatically in a way that can be properly read by the Power Platform during the import process? Why generating ZIP files manually works while programmatic generation causes an issue?


How to quickly replicate an issue

- Export solution package

- Unzip it

- ZIP it back using PowerShell:

 

[System.IO.Compression.ZipFile]::CreateFromDirectory($SourceDirectory, "PowerShell-Optinal-UTF8.zip",
[System.IO.Compression.CompressionLevel]::Fastest, $false, [System.Text.Encoding]::UTF8 )

 

- Import the ZIP Solution file

- Result: Get an error

More details

  • Why I am asking this question? I am trying to upgrade the Power Apps / Flow migrator script to also support Solution migration. 
  • I was trying to ZIP the file:
    • With UTF8 encoding
    • With different compressions:
      • Uncompressed
      • Fastest
      • Optimal
    • Was trying to Compress-Archive PowerShell cmdlet and [System.IO.Compression.ZipFile]::CreateFromDirectory .NET function. 

 

7_Compare.png

 

8_Compare ZIPS.png

1 ACCEPTED SOLUTION

Accepted Solutions
DenisMolodtsov
Kudo Kingpin
Kudo Kingpin

My friend Mark Doria found a solution to this issue:

- cd to the extracted Solution folder

- Run the following batch script:

tar -a -c -f "Sample.zip" *

 

The tar utility is a built-in Windows utility that creates ZIP files that Power platform does not complain about.

View solution in original post

11 REPLIES 11
EAguilera
Frequent Visitor

My suspect is that the file is not written as it should because of compression, I have experienced this before, two files that seems equals in the file explorer have different content.

 

I did a quick experiment with a zip of myself and I see that using your compression method I'm getting few extra bytes, and it can't be imported, so I changed it from [System.IO.Compression.CompressionLevel]::Fastest  with [System.IO.Compression.CompressionLevel]::Optimal I got exactly the same bytes amount of bytes and the file is imported as expected.

I did also a test with Compress-Archive (less code in the window) and it also worked as expected.

 

I hope this help!

 

 

/Eliel

Are you making the changes using a PowerShell script? As that will be converting all the files from whatever they were to Unicode and the rezipping of the files is going to hide the changes in file size from you.

 

I suspect you need to look at whatever script is making the changes and ensure -Encoding ascii is included in that script to avoid the output being corrupted by a language conversion.

 

Oh and believe me I only discovered this issue when someone else raised what looked like a similar issue. 

---
If this post has answered your question please consider it for "Accept as Solution" or if it has been helpful give it a "Thumbs Up".

I have conducted more tests, so far no luck with ASCII encoding and Optimal compression.

DenisMolodtsov_0-1600036237885.png

 

DenisMolodtsov_1-1600036261618.png

 

Will do more tests tonight/tomorrow. Strange thing is that manually zipping Solutions works like a charm. I don't understand what the difference is. I might need some ZIP debugging tool.

 

 

Sheppounet
New Member

Hi ! Have you found the solution ? I have the exact same problem ... And as for you, the answers here are not working.

(My computer system is in French regional settings, might have a relation to the issue and it's default encoding)

Unfortunately, I didn't find a way to generate a ZIP file programmatically. I sill need help from someone who understands how ZIP works on a low level. I gave up after spending days over this issue. 

johnnyshield
Advocate II
Advocate II

@johnnyshield , Thank you, very much for sharing. But unfrortunately @iAm_ManCat didn't solve it. The article that you shared here refers to standalone apps, not so-called Power platform solutions. Packaging Standalone apps and Flows using PowerShell poses no problem whatsoever. In fact, I "solved" this 4 years ago and published as an open sourse script here: https://github.com/Zerg00s/FlowPowerAppsMigrator. It does the same thing described in the article you shared, except it does the entire thing automatically, without manual maninupations.

 

My issue is with packaging Power Platform solutions. I tried everything under the sun to programmatically package Solutions and as a result, these zipped-up solutions simply are not accepted during the import procerure. On the other hand, standalone apps and flows that were packaged the same way have no issue whatsoever during the import. I hope it makes sense.

 

johnnyshield
Advocate II
Advocate II

My apologies, I stumbled across this thread while trawling for PowerApps app packaging & didn't take the time to read it in detail. Thanks for setting me straight.

Heya @DenisMolodtsov - the article is a solution for manually editing an msapp file to convert it to landscape/portrait, not for re-packaging the standalone Power App (which is as you say, fairly easy to do), so not quite the same as your migrator which deals with sharepoint data sources (very neat solution btw, kudos!)

 

thanks for the shoutout @johnnyshield, hope you both have a great day

@iAm_ManCat


Please 'Mark as Solution' if someone's post answered your question and always 'Thumbs Up' the posts you like or that helped you!


Thanks!
You and everyone else in the community make it the awesome and welcoming place it is, keep your questions coming and make sure to 'like' anything that makes you 'Appy
Sancho Harker, MVP


Helpful resources

Announcements
PA_User Group Leader_768x460.jpg

Manage your user group events

Check out the News & Announcements to learn more.

Community Connections 768x460.jpg

Community & How To Videos

Check out the new Power Platform Community Connections gallery!

Welcome Super Users.jpg

Super User Season 2

Congratulations, the new Super User Season 2 for 2021 has started!

Carousel 2021 Release Wave 2 Plan 768x460.jpg

2021 Release Wave 2 Plan

Power Platform release plan for the 2021 release wave 2 describes all new features releasing from October 2021 through March 2022.

Top Solution Authors
Top Kudoed Authors
Users online (1,196)