UWPExtractor.cs 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.IO;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using System.Windows.Forms;
  11. namespace UWPAppBackup
  12. {
  13. public partial class UWPExtractor : Form
  14. {
  15. public UWPExtractor()
  16. {
  17. InitializeComponent();
  18. }
  19. private void Form1_Load(object sender, EventArgs e)
  20. {
  21. String[] Dirs = Directory.GetDirectories(@"C:\Program Files\WindowsApps");
  22. foreach(String Dir in Dirs)
  23. {
  24. if(File.Exists(Dir + "\\AppxManifest.xml"))
  25. {
  26. UwpApps.Items.Add(Path.GetFileName(Dir));
  27. }
  28. }
  29. }
  30. private void AppBackup_Click(object sender, EventArgs e)
  31. {
  32. String AppName = UwpApps.SelectedItem.ToString();
  33. String path = @"C:\Program Files\WindowsApps\" + AppName;
  34. String Out = "";
  35. using (var fbd = new FolderBrowserDialog())
  36. {
  37. DialogResult result = fbd.ShowDialog();
  38. if (result == DialogResult.OK && !string.IsNullOrWhiteSpace(fbd.SelectedPath))
  39. {
  40. Out = fbd.SelectedPath;
  41. }
  42. }
  43. if(!Directory.Exists(Out))
  44. {
  45. Directory.CreateDirectory(Out);
  46. }
  47. if (!Directory.Exists(Out + "\\" + AppName))
  48. {
  49. Directory.CreateDirectory(Out+"\\"+ AppName);
  50. }
  51. int NumberOfFiles = Directory.GetFiles(path, "*", SearchOption.AllDirectories).Length;
  52. BackupProgress.Maximum = NumberOfFiles;
  53. foreach (string dirPath in Directory.GetDirectories(path, "*", SearchOption.AllDirectories))
  54. {
  55. Directory.CreateDirectory(dirPath.Replace(path, Out + "\\" + AppName));
  56. }
  57. foreach (string newPath in Directory.GetFiles(path, "*", SearchOption.AllDirectories))
  58. {
  59. File.Copy(newPath, newPath.Replace(path, Out + "\\" + AppName), true);
  60. BackupProgress.Increment(1);
  61. }
  62. String InstallBat = "@echo off\r\necho Please make sure to enable Developer Mode in Settings.\r\necho Press any key to install \"" + AppName + "\"\r\npause>nul\r\ncd " + AppName + "\r\nren \"AppxBlockMap.xml\" \"_AppxBlockMap.xml\r\nren \"AppxSignature.p7x\" \"_AppxSignature.p7x\r\npowershell -Command \"Add-AppxPackage -Path AppxManifest.xml -Register\r\nren \"_AppxBlockMap.xml\" \"AppxBlockMap.xml\"\r\nren \"_AppxSignature.p7x\" \"AppxSignature.p7x\"\r\necho Done, press any key to exit.\r\npause > nul";
  63. File.WriteAllText(Out + "\\Install.bat", InstallBat);
  64. MessageBox.Show("Done!","Backup Created",MessageBoxButtons.OK,MessageBoxIcon.Information);
  65. BackupProgress.Value = 0;
  66. }
  67. }
  68. }