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

C# 从Windows 8应用程序在Windows资源管理器中打开文件?,c#,windows,windows-8,C#,Windows,Windows 8,我想写一个函数,非常简单地最小化我的Windows 8沉浸式应用程序,并在资源管理器中打开一个文件-最好是文件位于包含多个文件的文件夹中,并突出显示该文件 public async void OpenFile( string filePath) { StorageFile File = await StorageFile.GetFileFromApplicationUriAsync (new Uri(filePath, U

我想写一个函数,非常简单地最小化我的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应用商店应用访问某些文件系统位置,如应用程序安装目录、应用程序数据位置和下载文件夹。应用程序还可以通过文件选择器或通过声明功能访问其他位置

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

正如汉斯·帕桑所说:

如果不考虑这个想法,你就无法实现这一目标

在我看来,这纯粹是一个内部应用程序

这是您预期方法的核心问题。Windows应用商店生态系统中没有“内部应用程序”的概念。让应用商店应用程序在另一台机器上运行的唯一可能的方法是获取只能从应用商店获得的许可证密钥

当您在dev机器上开发应用商店应用程序时,很容易忽略这一点。运行和调试应用程序似乎不需要此许可证密钥。但实际上有一个问题,当VisualStudio每月一次用对话框纠缠您以重新获取开发人员许可证密钥时,您就会明白这一点。这是一个临时密钥,有效期只有一个月,纯粹是为了给你足够的时间让你的应用稳定运行。没有任何机制可以将该密钥转移到另一台机器,或者在一个月到期后使其(和程序)保持活动状态

当然,您仍然可以向应用商店发布内部应用程序。但你会像其他商店应用程序一样,通过验证程序对其适用性和稳定性进行审查。不只是像WACK那样的机械测试,还有两个人会在你的应用发布之前测试它。当你试图绕过沙箱限制(包括协议处理程序黑客)时,他们会毫不犹豫地拒绝你的应用程序

一旦获得批准,任何Windows 8用户都可以下载它。包括一个黑客,他会对你公司内部的秘密和做法感兴趣。顺便说一句,非常方便,他不必脱下睡衣

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


这个答案需要更新,现在有一种机制可以从专用服务器发布应用程序。这称为侧载。该应用程序仍然需要证书,而且成本高昂,但可以从私人公司控制的私人服务器部署,而不是从Microsoft Store服务器部署


概述如下。

这方面有特定的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设置所需的视图


你读过这篇关于文件访问和权限的文章吗?从技术上讲,这可以通过编写一个协议处理程序来完成,该处理程序反过来启动资源管理器。问题是,您无法通过商店发布它,因此它对商店客户没有任何用处。“别胡思乱想了,你做不到这一点。”汉帕桑如果能做到,我愿意去做!我想,如果有一种通用的方法可以做到这一点,那么它将对相当多的内部Windows 8应用程序有用,即使它们无法存储:)@Simon Hans说得对,在发布到Windows应用商店的应用程序中,您将无法做到这一点。您可以使用协议处理程序路由使其在侧载LOB应用程序中工作,但侧载带来的成本可能超出您的能力范围。更多细节可能会被发现,我不介意它不被接受。老实说,从我的角度来看,这纯粹是一个内部应用程序,所以它不会被列在Windows 8应用商店中。顺便提一下,您提到您只能访问某些文件位置-这是用石头写的吗?除了KnownFolder location对象之外,无法访问任何文件夹的内容?这太痛苦了……”你提到你只能访问特定的文件位置——是用石头写的吗?“恐怕是的。如果您不介意不在MS Store上列出,那么协议处理程序方法是最好的选择。但这意味着你必须交付应用程序更新,你的所有用户都必须拥有MS开发者帐户(允许他们安装非商店应用程序)。PS:我想我们谈论的是Metro应用程序(Win-RT)。非常感谢您的回复。当然,你是完全正确的。到目前为止,我对Windows8应用程序的体验非常令人沮丧。在我看来,由于无法访问文件夹、数据库或执行类似的简单操作,应用商店几乎不值得开发。在开发更多应用程序之前,我将此应用程序作为我公司的概念证明……在这一点上,API的限制性太强,而且沙盒太多:(@Hans,这不完全正确。Windows 8支持在server 2012、enterprise、pro和RT版本上对LOB应用程序进行侧加载。有关更多详细信息,请参阅。您可以在Windows 8上对应用程序进行侧加载。但这样做需要您获得侧加载密钥,最多100台平板电脑的成本约为3000美元。哎哟,在我asn不看。@RafałSaltarski,你能提供这方面的来源/证据吗?从我发现的情况来看()&()并非如此。如果机器是域连接的,则不需要侧向加载密钥。如果它们不是域连接的,则可以使用临时密钥(我个人使用过)或通过批量许可获得密钥,我可以