从本地部署和从商店部署时,不同的应用程序行为

罗马斯

从Windows应用商店(测试版)部署应用程序时,我遇到一个奇怪的问题。该应用程序被编写为Windows Phone 8.1运行时。

我有一个用C ++ / C#编写的小型Windows运行时组件,用于检查文件是否存在:

bool FileEx::FileExists(String^ path)
{
    std::wstring pathW(path->Begin());
    std::string myPath(pathW.begin(), pathW.end());
    FILE *file = NULL;
    if (fopen_s(&file, myPath.c_str(), "r") == 0)
    {
         fclose(file);
         return true;
    }
    else return false;
}

测试方法:

现在,我们用两个文件对其进行测试-一个在本地文件夹中创建,另一个在MusicLibrary中的文件夹中创建。一切都在主项目中完成,该项目使用C ++ / C#中的上述方法引用了WRC。

const string localFileName = "local.txt";
const string musicFileName = "music.txt";
StorageFolder localFolder = ApplicationData.Current.LocalFolder;
StorageFolder musicFolder = await KnownFolders.MusicLibrary.CreateFolderAsync("MyFolder", CreationCollisionOption.OpenIfExists);
await localFolder.CreateFileAsync(localFileName, CreationCollisionOption.ReplaceExisting); // create local file
await musicFolder.CreateFileAsync(musicFileName, CreationCollisionOption.ReplaceExisting); // create file in MusicLibrary

a)本地文件拳头-使用纯C#测试:

// First check with C# if file exists - LOCAL FILE
StorageFile checkFile = null;
try { checkFile = await localFolder.GetFileAsync(localFileName); }
catch { checkFile = null; }
if (checkFile != null) await Trace.WriteLineAsync(false, "File exists with path = {0}", checkFile.Path);
else await Trace.WriteLineAsync(false, "File doesn't exist with path = {0}", checkFile.Path);

其次是书面内容:

Exception exc = null;
bool check = false;
try
{
    string path = string.Format(@"{0}\{1}", localFolder.Path, localFileName);
    await Trace.WriteLineAsync(false, "Attempt with WRC path = {0}", path);
    check = FileEx.FileExists(path);
}
catch (Exception ex) { exc = ex; }
if (exc != null) await Trace.WriteLineAsync(false, "Exception WRC");
else await Trace.WriteLineAsync(false, "No exception WRC, file exists = {0}", check);

b)与音乐库文件夹中的文件相同:

拳头-使用纯C#测试:

checkFile = null;
try { checkFile = await musicFolder.GetFileAsync(musicFileName); }
catch { checkFile = null; }
if (checkFile != null) await Trace.WriteLineAsync(false, "File exists with path = {0}", checkFile.Path);
else await Trace.WriteLineAsync(false, "File doesn't exist with path = {0}", checkFile.Path);

其次是书面内容:

check = false;
exc = null;
try
{
   string path = string.Format(@"{0}\{1}", musicFolder.Path, musicFileName);
   await Trace.WriteLineAsync(false, "Attempt with WRC path = {0}", path);
   check = FileEx.FileExists(path);
}
catch (Exception ex) { exc = ex; }
if (exc != null) await Trace.WriteLineAsync(false, "Exception WRC");
else await Trace.WriteLineAsync(false, "No exception WRC, file exists = {0}", check);

结果:

在任何情况下都没有例外,如纯C#方法所示,两个文件在创建后都存在。从下面的图片中可以看到,通过Visual Studio部署应用程序时,它可以正常运行,运行时组件会同时显示两个文件,但是从商店下载应用程序时,情况就不同了-WRC方法适用于本地文件,但是不适用于MusicLibrary中的这些内容。

本地部署

商店部署

问题:

在这两种情况下,文件路径都相同,在两个部署中,运行时组件均有效,因此第一个文件存在。尽管在packageappx.manifest文件中设置了所有必要的功能,但Windows运行时组件似乎无法访问MusicLibrary(本地部署有效)。

有谁知道为什么Windows运行时组件无法访问MusicLibrary中的文件?Windows运行时组件是否需要一些其他功能?
有什么办法可以使它起作用吗?

罗布·卡普兰(Rob Caplan)-MSFT

存储中的行为是正确的:该应用程序在其已安装和应用程序数据文件夹之外没有对该文件系统的权限。Win32和C运行时函数直接访问文件,因此需要直接访问权限。

StorageFile类与文件代理一起使用,因此可以利用声明的功能等优点。代理代表应用程序读取文件,并通过StorageFile流式传输文件内容。

应用程序必须使用StorageFile来读取或写入其应用程序数据和安装位置之外的文件

我们已标记出测试和生产之间的行为差​​异以进行调查。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何部署使用本地数据的闪亮应用程序

来自分类Dev

在同一VPS上部署不同的应用程序

来自分类Dev

部署OpenCL应用程序?

来自分类Dev

自动应用程序部署

来自分类Dev

Rails应用程序在本地运行,但在部署到Heroku时无法运行

来自分类Dev

使用本地数据集部署闪亮的应用程序

来自分类Dev

nodejs应用程序在本地运行,但在部署时无法运行

来自分类Dev

部署Laravel应用程序

来自分类Dev

从本地和商店部署时不同的应用程序行为

来自分类Dev

部署Erlang应用程序

来自分类Dev

在本地部署Swift OS X应用程序?

来自分类Dev

如何在本地部署OpenShift Java EE应用程序?

来自分类Dev

Azure逻辑应用程序在不同环境中的部署

来自分类Dev

如何使通过Puma和Capistrano部署的Rails应用程序在重新启动时启动

来自分类Dev

远程应用程序部署

来自分类Dev

部署我的应用程序

来自分类Dev

Rails部署:数据库和应用程序不同步

来自分类Dev

Rails应用程序在本地运行,但在部署到Heroku时无法运行

来自分类Dev

nodejs应用程序在本地运行,但在部署时无法运行

来自分类Dev

Qt应用程序部署

来自分类Dev

自动将应用程序部署到亚马逊商店

来自分类Dev

本地应用程序与部署到Heroku之间的差异

来自分类Dev

PaClient错误部署应用程序商店

来自分类Dev

Azure逻辑应用程序在不同环境中的部署

来自分类Dev

Arquillian部署应用程序,但测试仅在本地运行

来自分类Dev

已部署的 Clojure 应用程序中的本地配置

来自分类Dev

将 Ionic 应用程序部署到 Google 商店

来自分类Dev

我的 node + express 应用程序在本地部署良好,但在推送到 heroku 时不会部署

来自分类Dev

覆盖部署为 Tomcat 中的 WAR 的 spring-boot 应用程序的属性时的奇怪行为

Related 相关文章

  1. 1

    如何部署使用本地数据的闪亮应用程序

  2. 2

    在同一VPS上部署不同的应用程序

  3. 3

    部署OpenCL应用程序?

  4. 4

    自动应用程序部署

  5. 5

    Rails应用程序在本地运行,但在部署到Heroku时无法运行

  6. 6

    使用本地数据集部署闪亮的应用程序

  7. 7

    nodejs应用程序在本地运行,但在部署时无法运行

  8. 8

    部署Laravel应用程序

  9. 9

    从本地和商店部署时不同的应用程序行为

  10. 10

    部署Erlang应用程序

  11. 11

    在本地部署Swift OS X应用程序?

  12. 12

    如何在本地部署OpenShift Java EE应用程序?

  13. 13

    Azure逻辑应用程序在不同环境中的部署

  14. 14

    如何使通过Puma和Capistrano部署的Rails应用程序在重新启动时启动

  15. 15

    远程应用程序部署

  16. 16

    部署我的应用程序

  17. 17

    Rails部署:数据库和应用程序不同步

  18. 18

    Rails应用程序在本地运行,但在部署到Heroku时无法运行

  19. 19

    nodejs应用程序在本地运行,但在部署时无法运行

  20. 20

    Qt应用程序部署

  21. 21

    自动将应用程序部署到亚马逊商店

  22. 22

    本地应用程序与部署到Heroku之间的差异

  23. 23

    PaClient错误部署应用程序商店

  24. 24

    Azure逻辑应用程序在不同环境中的部署

  25. 25

    Arquillian部署应用程序,但测试仅在本地运行

  26. 26

    已部署的 Clojure 应用程序中的本地配置

  27. 27

    将 Ionic 应用程序部署到 Google 商店

  28. 28

    我的 node + express 应用程序在本地部署良好,但在推送到 heroku 时不会部署

  29. 29

    覆盖部署为 Tomcat 中的 WAR 的 spring-boot 应用程序的属性时的奇怪行为

热门标签

归档