Получить путь к любому файлу на компьютере в приложении UWP - PullRequest
0 голосов
/ 10 мая 2018

Я разрабатываю приложение UWP впервые. Я всегда использовал Windows Forms и WPF, но потенциальный дизайн этих приложений великолепен, но проблема в том, что они являются своего рода песочницей, особенно для моего текущего проекта. По сути, я делаю игровой лаунчер, где вы добавляете свои игры, а программа создает список игр. (Думайте об этом как о Steam для всего с современным дизайном Windows 10 Material).

Теперь мне удалось сделать почти все, кроме двух вещей. Во-первых, и это самое главное, это путь к игре. Я создаю средство выбора файлов, я могу выбрать файлы .exe, я могу получить их имена, но свойство file.Path не работает, оно возвращает нулевой путь. Я думал, что это может быть из-за изолированного дизайна UWP, но я углубился в это, что я действительно не хочу отказываться от него.

Вторая проблема - запуск этих файлов. Мне удалось сделать это в играх Steam, используя специальный URI Steam. («steam: // rungameid / xxxxxx», где xxxxxx - это идентификатор игры) Но это не сработает, если я просто добавлю путь в качестве URI.

Что ты думаешь? Есть ли какие-то решения? Позвольте мне показать вам некоторые из связанных кодов:

public async void SelectEXE()
{
    var picker = new Windows.Storage.Pickers.FileOpenPicker
    {
        ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail,
        SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.PicturesLibrary
    };
    picker.FileTypeFilter.Add(".exe");
    Windows.Storage.StorageFile file = await picker.PickSingleFileAsync();
    if (file != null)
    {
        stuffWrite[0] = file.Name;
        stuffWrite[1] = file.Path;
        count++;
        WriteCount();
        WriteItem(count, string.Join(",", stuffWrite));
        UpdateList();
    }
}

async void LaunchGame(string uriToLaunch)
{
    Uri uri = new Uri(uriToLaunch);
    games_list.Items.Add(uriToLaunch);
    uri = new Uri("steam://rungameid/730"); //replace with actual path
    await Windows.System.Launcher.LaunchUriAsync(uri);
}

1 Ответ

0 голосов
/ 10 мая 2018

Ограничения песочницы делают так, что получение пути из этого свойства не будет работать надежно, как отметил Ахмед.

Что касается запуска, вы не можете запускать exe-файлы непосредственно из приложения UWP.Это просто невозможно, поскольку это явно ограничено в дизайне.Некоторые обходные пути решения вашей проблемы:

  1. Используйте Steam для запуска не-Steam игр.Вы можете добавить не-Steam ярлыки, и это создаст SteamID на основе пути к файлу, чтобы вы могли запустить его из приложения UWP с помощью URI.Я нашел алгоритм для запуска любого exe-файла с использованием схемы URI Steam из этого сообщения на доске и перехода по ссылке на исходный код проекта Python этого человека.

  2. Создание помощникаWin32 приложение, которое делает запуск для вас.В моем наборе приложений я общаюсь между UWP и Win32, используя WebSocket.Существуют также новые решения для интеграции приложений Win32 в UWP, такие как Desktop Bridge и полное доверие Win32.

  3. Используйте сторонние скриптовые инструменты, такие как AutoHotkey.Пусть ваше приложение UWP сгенерирует строку сценария для запуска игры и сохранит текстовый файл с расширением, которое по умолчанию запускает этот язык сценария.Затем вы можете использовать класс Launcher для запуска файла, с которым по умолчанию откроется приложение для скриптинга, после чего оно запустит игру.Я сомневаюсь, что ваше приложение будет принято в Магазине Windows, если вы это сделаете.

  4. Не стоит использовать UWP вообще.Я уверен, что есть некоторые библиотеки, которые делают WPF более современным.

...