nterschiedliches App-Verhalten bei lokaler Bereitstellung und über Store

Ich stoße auf ein merkwürdiges Problem, wenn eine App aus dem Windows Store (Beta-Version) bereitgestellt wird. Die App ist als Windows Phone 8.1 RunTime geschrieben.

Ich habe eine kleine Windows-Laufzeitkomponente in C ++ / C # geschrieben, die die Existenz der Datei überprüft:

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

Now testen wir es mit zwei Dateien - eine im lokalen Ordner und eine im Ordner in MusicLibrary. Alles wird im Hauptprojekt gemacht, das einen Verweis auf WRC mit der obigen Methode in C ++ / C # hat.

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) Lokale Datei Faust - Test mit reinem 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);

Sekunde mit schriftlicher Komponente:

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) Dasselbe gilt für die Datei im Musikbibliotheksordner:

Fist - Test mit reinem 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);

Sekunde mit schriftlicher Komponente:

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

Wie reine C # -Methoden zeigen, gibt es in jedem Fall keine Ausnahme. Beide Dateien sind nach ihrer Erstellung vorhanden. Wie Sie in den folgenden Abbildungen sehen können, funktioniert die App bei der Bereitstellung über Visual Studio ordnungsgemäß. Die Laufzeitkomponente zeigt beide Dateien an. Wenn die App jedoch aus dem Store heruntergeladen wird, ist die Situation anders. Die WRC-Methode funktioniert jedoch für lokale Dateien nicht für diese in MusicLibrary.

FRAGE

In beiden Fällen sind die Dateipfade gleich, in beiden Implementierungen funktioniert die Laufzeitkomponente, daher ist die erste Datei vorhanden. Anscheinend hat die Windows-Laufzeitkomponente keinen Zugriff auf MusicLibrary, obwohl alle erforderlichen Funktionen in @ festgelegt wurde packageappx.manifest Datei (lokale Bereitstellung funktioniert).

Hat jemand eine Idee, warum die Windows-Laufzeitkomponente keinen Zugriff auf eine Datei in MusicLibrary hat? Benötigt die Windows-Laufzeitkomponente zusätzliche Funktionen?
Wie funktioniert es?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage