private static async Task parseArguments(AppServiceRequestReceivedEventArgs args, AppServiceDeferral messageDeferral, string arguments, ApplicationDataContainer localSettings) { switch (arguments) { case "Terminate": // Exit fulltrust process (UWP is closed or suspended) appServiceExit.Set(); messageDeferral.Complete(); break; case "RecycleBin": var binAction = (string)args.Request.Message["action"]; await parseRecycleBinAction(args, binAction); break; case "StartupTasks": // Check QuickLook Availability QuickLook.CheckQuickLookAvailability(localSettings); break; case "ToggleQuickLook": var path = (string)args.Request.Message["path"]; QuickLook.ToggleQuickLook(path); break; case "ShellCommand": // Kill the process. This is a BRUTAL WAY to kill a process. #if DEBUG // In debug mode this kills this process too?? #else var pid = (int)args.Request.Message["pid"]; Process.GetProcessById(pid).Kill(); #endif Process process = new Process(); process.StartInfo.UseShellExecute = true; process.StartInfo.FileName = "explorer.exe"; process.StartInfo.CreateNoWindow = false; process.StartInfo.Arguments = (string)args.Request.Message["ShellCommand"]; process.Start(); break; case "LoadMUIVerb": var responseSet = new ValueSet(); responseSet.Add("MUIVerbString", Win32API.ExtractStringFromDLL((string)args.Request.Message["MUIVerbLocation"], (int)args.Request.Message["MUIVerbLine"])); await args.Request.SendResponseAsync(responseSet); break; case "ParseAguments": var responseArray = new ValueSet(); var resultArgument = Win32API.CommandLineToArgs((string)args.Request.Message["Command"]); responseArray.Add("ParsedArguments", JsonConvert.SerializeObject(resultArgument)); await args.Request.SendResponseAsync(responseArray); break; case "Bitlocker": var bitlockerAction = (string)args.Request.Message["action"]; if (bitlockerAction == "Unlock") { var drive = (string)args.Request.Message["drive"]; var password = (string)args.Request.Message["password"]; Win32API.UnlockBitlockerDrive(drive, password); await args.Request.SendResponseAsync(new ValueSet() { { "Bitlocker", "Unlock" } }); } break; default: if (args.Request.Message.ContainsKey("Application")) { var application = (string)args.Request.Message["Application"]; HandleApplicationLaunch(application, args); } else if (args.Request.Message.ContainsKey("ApplicationList")) { var applicationList = JsonConvert.DeserializeObject <IEnumerable <string> >((string)args.Request.Message["ApplicationList"]); HandleApplicationsLaunch(applicationList, args); } break; } }