Rehber C# MSIX paketli uygulamalar nasıl çalıştırılır ve silinir?

Daha önce silmiş uygulamalarımızın (MSIX Packaged olanların) kaltıntıları shell:appsfolder veya %ProgramFiles%\WindowsApps klasöründe durabiliyor. Bunu silmek veya açmak için yapmamız gerekenleri göstereceğim.
Ardından isteğinize bağlı olarak daha önce kullanmadıklarınızı silebilir veya .exe'si duruyosa nasıl Process sınıfı ile çalıştırabileceğinizi göstereceğim.
Hazırsanız:
Ben yine geçenki gibi size gösterme amaçlı ConsoleApp 4.8.1 açıyorum:

Önce uygulamaları listeleyelim:
DİKKAT: Eğer listelenmeyen uygulamalar varsa, projeyi x64 tabanlı yaparsanız düzelecektir.
Ufak dokunuşlar (ufacık)

Son hâli:
C#:
using System.Collections.Generic;
using System.Diagnostics;
using System;
namespace AppsFolderHelper
{
    internal class Program
    {
        static void Main(string[] __)
        {
            Console.Title = "- Reis Production Apps Folder Helper -";
            Console.WriteLine($"|{new string('-', 60)}|\n" +
                               "|  Bütün kullanıcılar için indirilmiş uygulamalar  |\n" +
                              $"|{new string('-', 60)}|");
            int index = 1;
            var apps = new List<string>();
            var process = Process.Start(PowerShell("Get-AppxPackage -AllUsers | Select-Object -ExpandProperty Name"));
            // Sadece kaldırılabilir olanlar için: Get-AppxPackage | Where-Object { $_.SignatureKind -eq "Store" -and $_.IsFramework -eq $false }
            while (!process.StandardOutput.EndOfStream)
            {
                var line = process.StandardOutput.ReadLine();
                Console.WriteLine($"| [{index}] - {line}");
                apps.Add(line);
                index++;
            }
            Console.ForegroundColor = ConsoleColor.DarkGreen;
            Console.Write($"|{new string('-', 60)}|\n" +
                           "| S: Sil, O: Olmayanları listele, C: Çalıştır: ");
            bool run = true;
            while (run)
            {
                switch (Console.ReadKey(intercept: true).Key)
                {
                    case ConsoleKey.S:
                        Console.WriteLine($"Sil\n|{new string('-', 60)}|");
                        run = false;
                        break;
                    case ConsoleKey.O:
                        Console.WriteLine("Olmayanları listele\n" +
                                         $"|{new string('-', 60)}|\n" +
                                          "| Olmayan uygulamalar listeleniyor...\n" +
                                         $"|{new string('-', 60)}|");
                        var nonExistentApps = ListNonExistentApps();
                        // Devamı sizde :D
                        Console.ReadKey();
                        run = false;
                        return;
                    case ConsoleKey.C:
                        Console.Write("Çalıştır\n" +
                                     $"|{new string('-', 60)}|\n" +
                                      "| Çalıştırmak için bir uygulama seçiniz: ");
                        if (int.TryParse(Console.ReadLine(), out int ind) && ind > 0 && ind <= apps.Count)
                            RunApp(apps[ind - 1]);
                        run = false;
                        break;
                }
            }
            Console.ResetColor();
            Console.Write("| Silinecek uygulama indeksini giriniz (1'den başlayarak): ");
            if (int.TryParse(Console.ReadLine(), out int i) && i > 0 && i <= apps.Count)
                DeleteApp(apps[i - 1]);
            else throw new ArgumentOutOfRangeException(nameof(i), "Geçersiz uygulama indeksi girildi.");
            Console.ReadKey();
        }
        private static List<string> ListNonExistentApps()
        {
            int index = 1;
            var nonExistentApps = new List<string>();
            Console.WriteLine("| Olmayan uygulamalar:");
            var process = Process.Start(PowerShell("Get-AppxPackage | Where-Object { !$_.InstallLocation } | Select-Object -ExpandProperty Name"));
            /*
                # Kaldırılmış ama kaydı kalmış uygulamalar
                Get-AppxPackage | Where-Object { $_.Status -eq "Deleted" }

                # Provisioned paketleri listele
                Get-AppxProvisionedPackage -Online | Where-Object { $_.InstallLocation -eq $null }
             */
            if (!process.StandardOutput.EndOfStream)
                while (!process.StandardOutput.EndOfStream)
                {
                    var app = process.StandardOutput.ReadLine();
                    Console.WriteLine($"| [{index}] - {app}");
                    nonExistentApps.Add(app);
                    index++;
                }
            else
                Console.WriteLine("| Hiç olmayan uygulama bulunamadı.\n" +
                                 $"|{new string('-', 60)}|");
            return nonExistentApps;
        }
        private static ProcessStartInfo PowerShell(string args) => new ProcessStartInfo
        {
            Verb = "runas",
            Arguments = args,
            FileName = "powershell",
            RedirectStandardOutput = true,
            UseShellExecute = false,
            CreateNoWindow = true
        };
        private static void RunApp(string appName)
        {
            if (string.IsNullOrEmpty(appName))
                throw new ArgumentNullException(nameof(appName), "Uygulama adı boş olamaz.");
            string command = $@"
        $package = Get-AppxPackage -Name '*{appName}*' | Select-Object -First 1
        if ($package) {{
            $familyName = $package.PackageFamilyName
            explorer ""shell:appsFolder\$familyName!App""
        }} else {{
            Write-Output 'Uygulama bulunamadı'
        }}";
            var psi = new ProcessStartInfo
            {
                FileName = "powershell.exe",
                Arguments = $"-NoProfile -ExecutionPolicy Bypass -Command \"{command}\"",
                RedirectStandardOutput = true,
                UseShellExecute = false,
                CreateNoWindow = true
            };
            using (var process = Process.Start(psi))
            {
                string output = process.StandardOutput.ReadToEnd();
                Console.WriteLine($"| Çıktı: {output.Trim()}");
            }

            Console.WriteLine($"| Uygulama '{appName}' başlatma işlemi tamamlandı.\n" +
                             $"|{new string('-', 60)}|");
        }
        private static void DeleteApp(string appName)
        {
            if (string.IsNullOrEmpty(appName)) throw new ArgumentNullException(nameof(appName), "Uygulama adı boş olamaz.");
            //Process.Start(PowerShell($"Remove-AppxPackage -Package {appName}")).WaitForExit();
            Console.Write($"| Uygulama '{appName}' başarıyla silindi.\n" +
                          $"|{new string('-', 60)}|");
        }
    }
}






İyi günler ve iyi çalışmalar dilerim!
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…