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));
     }
 }

这段代码给了我一个权限错误。有任何想法吗?

4

3 回答 3

7

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

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

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

就像 Hans Passant 说的:

从头开始,您无法完成这项工作。

于 2013-01-21T16:54:46.277 回答
5

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

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

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

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

一旦获得批准,任何Windows 8 用户都可以下载它。包括对您的内部公司机密和做法感兴趣的黑客。也很方便,不用脱睡衣。

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


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

此处提供了概述。

于 2013-01-21T17:24:30.980 回答
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

于 2015-12-04T23:59:57.043 回答