Использование FilePicker в MAUI с правами администратораC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Использование FilePicker в MAUI с правами администратора

Сообщение Anonymous »

Иногда я использую MAUI, но недавно обнаружил, что встроенный инструмент выбора файлов Microsoft.Maui.Storage.FilePicker не работает, когда приложение работает от имени администратора. Я искал и вижу, что кто-то публикует решение для этой проблемы в PavlikBender/Pickers. Итак, я использовал его, и он работает. Но вскоре я понимаю, что у него нет возможности выбрать несколько файлов одновременно.
Я попробовал изменить код следующим образом:
создать новый файл FileMultiPicker.cs:

Код: Выделить всё

using Pickers.Classes;
using Pickers.Enums;

namespace Pickers;

public class FileMultiPicker
{
private readonly IntPtr _windowHandle;

public FileMultiPicker(IntPtr windowHandle)
{
_windowHandle = windowHandle;
}

public List Show(List? typeFilters = null)
{
return Helper.ShowMulti(_windowHandle, FOS.FOS_ALLOWMULTISELECT | FOS.FOS_FORCEFILESYSTEM, typeFilters);
}
}
добавьте новую функцию в Helper.cs:

Код: Выделить всё

internal static List ShowMulti(nint windowHandle, FOS fos, List? typeFilters = null)
{
var dialog = new FileOpenDialog();
try
{
dialog.SetOptions(fos);
if (typeFilters != null)
{
typeFilters.Insert(0, string.Join("; ", typeFilters));
var filterSpecs = typeFilters.Select(f => new COMDLG_FILTERSPEC(f)).ToArray();
dialog.SetFileTypes((uint)filterSpecs.Length, filterSpecs);
}
if (dialog.Show(windowHandle) != 0) return new();

// the above is copy from source, the below is my own take on the matter

dialog.GetResults(out IShellItemArray results);
List files = new();
results.GetCount(out var count);
for (uint i = 0; i < count; i++)
{
results.GetItemAt(i, out var result);
result.GetDisplayName(SIGDN.SIGDN_FILESYSPATH, out var path);
files.Add(path);
}
return files;
}
catch (Exception ex)
{
return new();
}
finally
{
#pragma warning disable CA1416
Marshal.ReleaseComObject(dialog);
#pragma warning restore CA1416
}
}
приложение собирается и запускается, но когда я тестирую средство выбора, оно выдает исключение в строке диалога.GetResults(out IShellItemArray results); : Значение не попадает в пределы ожидаемый диапазон.
Я почти ничего не знаю о том, как они на самом деле работают, поэтому, если кто-то может проверить источник и помочь мне заставить это работать или указать мне какое-то направление, я был бы признателен это

Подробнее здесь: https://stackoverflow.com/questions/781 ... -privilege
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»