Получить путь к любому файлу на компьютере в приложении 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. Это просто невозможно, поскольку это явно ограничено в дизайне. Некоторые обходные пути решения вашей проблемы:
Используйте Steam для запуска не-Steam игр. Вы можете добавить не-Steam ярлыки, и это создаст SteamID на основе пути к файлу, чтобы вы могли запустить его из приложения UWP с помощью URI. Я нашел алгоритм запуска любого exe-файла с использованием URI-схемы Steam из этого сообщения на доске и следовал по ссылке на исходный код проекта Python этого человека.
Создайте вспомогательное приложение Win32, которое сделает запуск за вас. В моем наборе приложений я общаюсь между UWP и Win32, используя WebSocket. Существуют также новые решения для интеграции приложений Win32 в UWP, такие как Desktop Bridge и полное доверие Win32.
Используйте сторонние скриптовые инструменты, такие как AutoHotkey. Пусть ваше приложение UWP сгенерирует строку сценария для запуска игры и сохранит текстовый файл с расширением, которое по умолчанию запускает этот язык сценария. Затем вы можете использовать класс Launcher для запуска файла, с которым по умолчанию откроется приложение для скриптинга, после чего оно запустит игру. Я сомневаюсь, что ваше приложение будет принято в Магазине Windows, если вы это сделаете.
Подумайте не использовать UWP вообще. Есть некоторые библиотеки, которые заставляют WPF выглядеть более современно, я уверен, вы знаете.