2012-08-13 16 views
5

Gdy kompiluję swoją aplikację w Visual Studio 2012 RC, widzę folder wygenerowany w folderze źródłowym projektu zgodnie z oczekiwaniami, w którym znajduje się plik foo.exe, wygląda jak wpis aplikacja. Kiedy rozpocząć debugowanie aplikacji, jej ikona jest umieszczany na ekranie startowym i mogę znaleźć nowy folder utworzony wwdrażanie aplikacji Windows 8

C: \ Users \ kogoś \ AppData \ Local \ Packages \ xxxxx_xxxxxx

Ale nie mogę znaleźć pliku foo.exe w tym folderze, nawet po przeszukaniu całego dysku. Wygląda na to, że aplikacja win8 ma inny mechanizm instalacji/wdrażania niż stare programy Windows. Moje pytania to:

(1) jak/gdzie aplikacja/instalacja win8 jest zainstalowana?

(2) Chcę użyć \AppData\Local\Packages\xxxxx_xxxxxx\LocalState jako lokalnego folderu danych (co odpowiada ApplicationData.Current.LocalFolder w kodzie), ale cały folder zostanie usunięty po kliknięciu prawym przyciskiem myszy na ikonie ekranu startowego i naciśnięciu "odinstaluj" bez ostrzeżenia. Jakieś lepsze miejsce do przechowywania danych lokalnych? Czy potrzebuję SQLite? Na przykład moja aplikacja zapisuje wszystkie komunikaty o awariach w error.txt, oczywiście nie mogę używać sqlite w tym przypadku, a jeśli wstawię error.txt w folderze LocalState, użytkownicy mogą już odinstalować aplikację, zanim przejdę do niego, aby zobaczyć, co jest w error.txt. Innym scenariuszem jest: użytkownik chce odinstalować aplikację, ale zachować swoje lokalne dane (pliki). Oczywiście ApplicationData.Current.LocalFolder nie jest dobrym wyborem.

Odpowiedz

4

1) Windows 8 pakiety są wdrażane do katalogu C: \ Program Files \ windowsapps \, ale domyślnie don nie ma prawa własności do tego folderu, więc nie może uzyskać do niego dostępu. To jednak w dużej mierze nieistotne. Nigdy nie powinieneś mieć dostępu do tego folderu według projektu.

2) Ponownie, usunięcie lokalnych folderów danych aplikacji po odinstalowaniu jest oczekiwanym zachowaniem. W przeciwnym razie, jeśli wdrożyłeś aplikację za pośrednictwem sklepu i zaczęła źle działać i zajmowała całą dostępną przestrzeń dyskową, nie byłoby prostego sposobu na usunięcie tych danych przez użytkownika. Twoje twierdzenie, że nie ma ostrzeżenia, nie jest jednak prawdą. Okno odinstalowywania wyraźnie mówi "Ta aplikacja i związane z nią informacje zostaną usunięte z tego komputera"

W niektórych przypadkach przechowywanie danych w folderze roamingowym może być opcją, ale ten folder nie jest przeznaczony dla dużych ilości danych - jest tam, aby trzymać ustawienia aplikacji/opcje konfiguracyjne, aby wędrować między urządzeniami. Prawdopodobnie będziesz mógł umieścić tam swój dziennik awarii (jeśli jest wystarczająco mały), ale nie ma gwarancji, że zostanie zsynchronizowany z chmurą przed odinstalowaniem aplikacji. Najlepszym rozwiązaniem byłoby prawdopodobnie użycie Live SDK do synchronizacji danych z chmurą, ale znowu nie masz gwarancji, że dane zostaną natychmiast zapisane w chmurze.

1

Powinieneś używać izolowanego magazynu do przechowywania danych w systemie plików w aplikacji Windows 8 Metro. Możesz znaleźć lokalizację, korzystając z:

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

Ponieważ architektura każdej platformy ulega zmianie, nigdy nie będziesz mieć pewności, gdzie będą przechowywane dane, ale ta stała zapewni, że będzie działać we wszystkich aplikacjach. Ten folder jest również "bezpieczny", gdy aplikacja jest zainstalowana i uaktualniona, więc nie powinieneś tracić danych z jej używania.

Przykładem tego używając SQLLite-net można znaleźć na dole tej strony: http://timheuer.com/blog/archive/2012/05/20/using-sqlite-in-metro-style-app.aspx

+0

Ale moje pytanie brzmi: 'Windows.Storage.ApplicationData.Current.LocalFolder' jest usuwany bez ostrzeżenia, gdy użytkownicy klikną prawym przyciskiem myszy ikonę aplikacji i wybierz opcję odinstalowania. Nie nadaje się do mojej aplikacji. Chcę bezpieczniejszego miejsca. –

+1

Aplikacje Metro według projektu nie obsługują tego scenariusza. Oddzielone miejsce do przechowywania jest jedynym dostępem do zapisu, które dostajesz do systemu plików bez implementowania eksploratora plików. Jeśli chcesz zapisać te dane nawet po instalacji, musisz rozważyć stopniowe zsynchronizowanie ich z "usługą w chmurze" i aktualizację aplikacji po jej ponownym zainstalowaniu. – LewisBenge