在 UWP 应用中获取计算机上任何文件的路径
Posted
技术标签:
【中文标题】在 UWP 应用中获取计算机上任何文件的路径【英文标题】:Get path to any file on the computer in UWP app 【发布时间】:2018-10-20 03:53:15 【问题描述】:我是第一次开发 UWP 应用。我一直使用 Windows Forms 和 WPF,但这些应用程序的潜在设计是华丽的,但问题是它们是一种沙盒,尤其是对于我当前的项目。基本上,我正在制作一个游戏启动器,您可以在其中添加游戏,程序会创建一个游戏列表。 (可以将它想象成适用于具有现代 Windows 10 Material 设计的一切的 Steam)。
现在,我几乎完成了所有事情,但只有两件事。首先,也是最重要的,是找到通往游戏的道路。我创建了一个文件选择器,我可以选择 .exe 文件,我可以获取它们的名称,但是 file.Path
属性不起作用,它返回一个空路径。我以为这可能是因为 UWP 的沙盒设计,但我深陷其中,我真的不想放弃它。
第二个问题是这些文件的启动。我设法使用 Steam 的特定 URI 在 Steam 游戏上做到这一点。 ("steam://rungameid/xxxxxx" 其中 xxxxxx 是游戏 id) 但是如果我只是将路径作为 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);
【问题讨论】:
我以前也从未使用过 UWP,但我刚刚尝试了您的代码,file.Path
很好地返回了文件的完整路径。旁注:you should avoid using async void
.
但是,我刚刚检查了the docs,它说:“不要依赖此属性来访问文件,因为某些文件可能没有文件系统路径。例如如果文件由 URI 支持,或者是使用文件选择器选择的,则不能保证该文件具有文件系统路径。” 但它们没有引用任何替代方法,因此我不知道。也许有 UWP 经验的人可以帮助你。祝你好运!
谢谢!是的,我不知道,它的行为很奇怪。
【参考方案1】:
正如 Ahmed 指出的那样,沙盒限制使得从该属性获取路径无法可靠地工作。
至于启动,您不能直接从 UWP 应用启动 exe 文件。这根本不可能,因为它被设计明确限制这样做。针对您的问题的一些解决方法:
使用 Steam 启动非 Steam 游戏。您可以添加非 Steam 快捷方式,这会根据文件的路径创建一个 SteamID,以便您可以使用 URI 从 UWP 应用程序启动它。我找到了使用来自this board post 的 Steam URI 方案启动任何 exe 的算法,并点击该人的 Python 项目源代码的链接。
创建一个帮助您启动的 Win32 应用程序。在我的应用程序套件中,我使用 WebSocket 在 UWP 和 Win32 之间进行通信。还有一些新的解决方案可以将 Win32 应用程序集成到 UWP 中,例如 Desktop Bridge 和完全信任的 Win32。
使用 AutoHotkey 等第 3 方脚本工具。让你的 UWP 应用生成脚本字符串以启动游戏,并保存带有默认启动该脚本语言的扩展名的文本文件。然后,您可以使用 Launcher 类启动文件,脚本应用程序将默认打开该文件,然后它将启动游戏。如果您这样做,我怀疑您的应用程序是否会在 Windows 应用商店中被接受。
考虑完全不使用 UWP。我相信您知道有一些库可以让 WPF 看起来更现代。
【讨论】:
我想我会选择助手选项。看起来这实际上是一个好主意,因为我可以拥有一个原生的现代设计,而后台处理是由我习惯的一种程序完成的。谢谢!!以上是关于在 UWP 应用中获取计算机上任何文件的路径的主要内容,如果未能解决你的问题,请参考以下文章