2012-08-13 3 views
5

Wenn ich meine App in Visual Studio 2012 RC kompilieren, kann ich sehen, bin\ Ordner im Projektquellordner wie erwartet generiert, in dem es eine foo.exe, sieht aus wie der Eintrag der App Wenn ich Debuggen der Anwendung starten, wird das entsprechende Symbol auf dem Startbildschirm gesetzt und ich kann einen neuen OrdnerBereitstellung einer Windows 8-Anwendung

C erstellt finden: \ Users \ jemand \ AppData \ Local \ Packages \ xxxxx_xxxxxx

Aber ich kann foo.exe in diesem Ordner nicht finden, selbst nachdem ich die ganze Festplatte durchsucht habe. Es scheint, dass die win8-Anwendung einen anderen Installations-/Implementierungsmechanismus als alte Windows-Programme hat. Meine Fragen sind:

(1) Wie/wo die win8 App bereitgestellt/installiert wird?

(2) Ich möchte \AppData\Local\Packages\xxxxx_xxxxxx\LocalState als lokalen Datenordner verwenden (was im Code ApplicationData.Current.LocalFolder entspricht), aber der gesamte Ordner wird gelöscht, wenn Sie mit der rechten Maustaste auf das Startbildschirmsymbol klicken und "uninstall" ohne Warnung drücken. Irgendein besserer Ort, um lokale Daten zu speichern? Oder brauche ich SQLite? Zum Beispiel schreibt meine App alle Crash-Nachrichten in error.txt, natürlich kann ich sqlite in diesem Fall nicht verwenden, und wenn ich error.txt in LocalState Ordner, Benutzer möglicherweise bereits die App deinstalliert, bevor ich zu ihm gehen, um zu sehen, was in error.txt ist. Ein anderes Szenario ist: Ein Benutzer möchte die App deinstallieren, aber seine lokalen Daten (Dateien) behalten. Offensichtlich ist ApplicationData.Current.LocalFolder keine gute Wahl.

Antwort

4

1) Die Windows 8-Pakete c bereitgestellt werden: \ Programme \ windowsapps \, aber standardmäßig Sie don Sie sind nicht Eigentümer des Ordners und können daher nicht darauf zugreifen. Das ist jedoch weitgehend irrelevant. Sie sollten niemals per Entwurf Zugriff auf diesen Ordner haben.

2) Erneutes Löschen der lokalen Datenordner für eine App bei der Deinstallation ist erwartetes Verhalten. Andernfalls, wenn Sie eine App über den Store bereitgestellt haben und dieser sich schlecht benommen hat und Ihren gesamten verfügbaren Speicherplatz belegt hat, gibt es keine einfache Möglichkeit für einen Benutzer, diese Daten zu löschen. Ihre Behauptung, dass es keine Warnung gibt, ist jedoch nicht wahr. Das Deinstallationspopup sagt eindeutig "Diese App und die zugehörigen Informationen werden von diesem PC entfernt"

In einigen Fällen kann das Speichern von Daten im Roaming-Ordner eine Option sein, aber dieser Ordner ist nicht für große Datenmengen gedacht - Es ist dort, um Anwendung Einstellungen/Konfigurationsoptionen zwischen Geräten roaming zu halten. Sie könnten Ihr Crash-Log während der Entwicklung dort einbringen (wenn es klein genug ist), aber es gibt keine Garantie, dass es mit der Cloud synchronisiert wird, bevor die App deinstalliert wird. Am besten wäre es wahrscheinlich, das Live SDK zum Synchronisieren von Daten mit der Cloud zu verwenden, aber Sie können nicht garantieren, dass Daten sofort in die Cloud geschrieben werden.

1

Sie sollten isolierten Speicher für persistente Daten im Dateisystem in einer Windows 8 Metro App verwenden. Sie können den Speicherort mithilfe der folgenden finden:

Windows.Storage.ApplicationData.Current.LocalFolder.Path;

Da sich die Architektur jeder Plattform ändert, werden Sie nie sicher wissen, wo Ihre Daten gespeichert werden, aber diese Konstante stellt sicher, dass sie über alle Anwendungen hinweg funktioniert. Dieser Ordner wird auch während der Installation der Anwendung "sicher" gehalten und aktualisiert, damit Sie keine Daten verlieren, wenn Sie sie verwenden.

Ein Beispiel für dieses SQLLite-net verwendet, kann am Ende dieser Seite zu finden: http://timheuer.com/blog/archive/2012/05/20/using-sqlite-in-metro-style-app.aspx

+0

Aber meine Frage ist: 'Windows.Storage.ApplicationData.Current.LocalFolder wird ohne Warnung gelöscht, wenn Benutzer mit der rechten Maustaste auf das App-Symbol klicken und die Deinstallation auswählen. Es ist nicht für meine App geeignet. Ich möchte einen sichereren Ort. –

+1

Metro-Apps von Entwurf unterstützen dieses Szenario nicht. Der isolierte Speicher ist der einzige Schreibzugriff, den Sie auf das Dateisystem erhalten, ohne einen Datei-Explorer zu implementieren. Wenn Sie diese Daten auch nach der Installation speichern möchten, müssen Sie sie inkrementell mit einem "Cloud-Dienst" synchronisieren und die Anwendung aktualisieren, wenn sie erneut installiert wird. – LewisBenge