从Windows 8应用程序中在Windows资源管理器中打开文件

本文关键字:Windows 文件 资源管理器 应用程序 | 更新日期: 2023-09-27 17:53:54

我想写一个函数,非常简单地最小化我的Windows 8沉浸式应用程序,并在资源管理器中打开一个文件-最好是文件在一个有多个文件的文件夹中,并突出显示文件。

 public async void OpenFile( string filePath)
 {
     StorageFile File = await StorageFile.GetFileFromApplicationUriAsync
                              (new Uri(filePath, UriKind.RelativeOrAbsolute)); ;
     if (File != null)
     {
         await Launcher.LaunchUriAsync(new Uri(File.Path));
     }
 }

这段代码给了我一个权限错误。什么好主意吗?

从Windows 8应用程序中在Windows资源管理器中打开文件

据我回忆,微软是不允许的。应用程序应该被设计成运行在沙盒中,拥有有限的权利。

您可以访问某些文件系统位置,如应用程序安装目录,应用程序数据位置和下载文件夹,默认情况下与Windows Store应用程序。应用程序还可以通过文件选择器或通过声明功能来访问其他位置。

我尝试过协议处理程序方法,但被拒绝了两次即使你找到了这样做的方法并且仍然发布,这并不意味着微软不会改变主意并将你的应用从商店中删除。

就像汉斯·帕桑说的:

放弃这个想法,你不可能做到。

从我的角度来看,这纯粹是一个内部应用程序

这是你想要的方法的核心问题。在Windows Store生态系统中不存在"内部应用"的概念。让商店应用程序在另一台机器上运行的唯一可能的方法是获取只能从商店获得的许可密钥。

当你在自己的开发机器上开发应用时,这一点很容易被忽略。它看起来好像这个许可密钥不需要运行和调试你的应用程序。但实际上有一个,当Visual Studio每个月用一个对话框缠着你重新获取你的开发人员许可密钥时,你会得到它。这是一个临时键,只适用于一个月,纯粹是为了给你足够的时间让你的应用稳定运行。没有任何机制可以将该密钥转移到另一台机器或使其(和程序)超过一个月的有效期。

当然你仍然可以发布一个内部应用到商店。但你会像其他商店应用一样,通过验证程序来审查应用的适用性和稳定性。与WACK所执行的机械测试不同,在你的应用发布之前,有两个人会对其进行测试。当你做任何试图绕过沙箱限制的事情时,他们会毫不犹豫地拒绝你的应用,包括协议处理程序破解。

一旦批准,它将被任何 Windows 8用户下载。顺便说一句,包括一个对你公司内部秘密和做法感兴趣的黑客。也很方便,他不用脱下睡衣。

在可预见的未来,典型的业务线应用程序仍然是桌面应用程序。


这个答案需要更新,现在有一种机制可以从专用服务器发布应用程序。这被称为侧载。这款应用仍然需要证书,而且价格不菲,但可以从私人公司控制的私人服务器上部署,而不是从微软商店服务器上部署。

对此有特定的API,似乎没有人意识到:

var success = await Windows.System.Launcher.LaunchFolderAsync(KnownFolders.DocumentsLibrary);

这个API的更高级形式接受选项:

FolderLauncherOptions options = new FolderLauncherOptions();
options.ItemsToSelect.Add(file1);
bool success = await Windows.System.Launcher.LaunchFolderAsync(folder, options);

您也可以使用options.DesiredRemainingView设置所需视图。

https://msdn.microsoft.com/en-us/library/windows/apps/dn889617.aspx