Получить путь к любому файлу на компьютере в приложении UWP

Я разрабатываю приложение 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 ответ

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

Что касается запуска, вы не можете запускать 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 выглядеть более современно, я уверен, вы знаете.

Другие вопросы по тегам