Esempio n. 1
0
 private static async void Watcher_Changed(object sender, FileSystemEventArgs e)
 {
     Debug.WriteLine($"Recycle bin event: {e.ChangeType}, {e.FullPath}");
     if (e.Name.StartsWith("$I"))
     {
         // Recycle bin also stores a file starting with $I for each item
         return;
     }
     if (connection?.IsConnected ?? false)
     {
         var response = new ValueSet()
         {
             { "FileSystem", @"Shell:RecycleBinFolder" },
             { "Path", e.FullPath },
             { "Type", e.ChangeType.ToString() }
         };
         if (e.ChangeType == WatcherChangeTypes.Created)
         {
             using var folderItem = new ShellItem(e.FullPath);
             var shellFileItem = GetShellFileItem(folderItem);
             response["Item"] = JsonConvert.SerializeObject(shellFileItem);
         }
         // Send message to UWP app to refresh items
         await Win32API.SendMessageAsync(connection, response);
     }
 }
Esempio n. 2
0
        private static async Task ParseArgumentsAsync(Dictionary <string, object> message, string arguments)
        {
            switch (arguments)
            {
            case "Terminate":
                // Exit fulltrust process (UWP is closed or suspended)
                appServiceExit?.Set();
                break;

            case "Elevate":
                // Relaunch fulltrust process as admin
                if (!IsAdministrator())
                {
                    try
                    {
                        using (Process elevatedProcess = new Process())
                        {
                            elevatedProcess.StartInfo.Verb            = "runas";
                            elevatedProcess.StartInfo.UseShellExecute = true;
                            elevatedProcess.StartInfo.FileName        = Process.GetCurrentProcess().MainModule.FileName;
                            elevatedProcess.StartInfo.Arguments       = "elevate";
                            elevatedProcess.Start();
                        }
                        await Win32API.SendMessageAsync(connection, new ValueSet()
                        {
                            { "Success", 0 }
                        }, message.Get("RequestID", (string)null));

                        appServiceExit?.Set();
                    }
                    catch (Win32Exception)
                    {
                        // If user cancels UAC
                        await Win32API.SendMessageAsync(connection, new ValueSet()
                        {
                            { "Success", 1 }
                        }, message.Get("RequestID", (string)null));
                    }
                }
                else
                {
                    await Win32API.SendMessageAsync(connection, new ValueSet()
                    {
                        { "Success", -1 }
                    }, message.Get("RequestID", (string)null));
                }
                break;

            default:
                foreach (var mh in messageHandlers)
                {
                    await mh.ParseArgumentsAsync(connection, message, arguments);
                }
                break;
            }
        }
Esempio n. 3
0
 private async Task SendEvent(string deviceName, string deviceId, DeviceEvent eventType)
 {
     if (connection?.IsConnected ?? false)
     {
         await Win32API.SendMessageAsync(connection, new ValueSet()
         {
             { "DeviceID", deviceId },
             { "EventType", (int)eventType }
         });
     }
 }