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

时间:2013-01-17 17:31:16

标签: c# windows windows-8

我想编写一个函数,它可以简化我的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));
     }
 }

此代码给我一个权限错误。有什么想法吗?

3 个答案:

答案 0 :(得分:7)

据我所知,MS不会允许它。 应用程序的设计应该像在沙盒中运行一样,权限有限。

  

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

我已尝试过协议处理程序方法,但遭到两次拒绝:D 即使您找到了这样做并仍然发布的方法,但这并不意味着MS不会改变主意并从商店中移除您的应用。

就像Hans Passant说的那样:

  

抓住这个想法,你无法做到这一点。

答案 1 :(得分:5)

  

从我的角度来看,这纯粹是针对内部应用

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

当您在开发计算机上开发Store应用程序时,很容易忽略这一点。 看起来像这样的许可证密钥不需要运行和调试您的应用程序。但实际上只有一个,当Visual Studio每月一次对话时,你会得到它,以重新获得开发人员许可证密钥。这是一个临时键,仅适用于一个月,纯粹是为了让您有足够的时间让您的应用程序稳定运行。没有机制将该密钥传输到另一台计算机或使其(和程序)保持活动超过一个月到期。

您当然可以向商店发布内部应用。但是,您将通过验证程序审核适用性和稳定性,就像任何其他商店应用程序一样。不仅仅是像WACK那样的机械测试,还有两个人会在你的应用发布之前对其进行测试。当您尝试解决沙盒限制时,他们会毫不犹豫地拒绝您的应用,包括协议处理程序黑客。

获得批准后,任何 Windows 8用户都可以下载。包括一个对您的内部公司机密和实践感兴趣的黑客。非常方便,他不必脱掉睡衣。

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


这个答案需要更新,现在有一种机制可以从专用服务器发布应用程序。这称为 sideloading 。该应用程序仍然需要一个证书,它需要大笔费用,但可以从私人公司而不是Microsoft Store服务器控制的私人服务器进行部署。

概述为available here

答案 2 :(得分:0)

有特定的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