2012-08-13 37 views
5

Khi tôi biên dịch ứng dụng trong studio hình ảnh 2012 RC, tôi có thể thấy thư mục bin\ được tạo trong thư mục nguồn dự án như dự kiến, trong đó có một foo.exe, trông giống như mục nhập của ứng dụng. Khi tôi bắt đầu gỡ lỗi các ứng dụng, biểu tượng của nó được đặt trên màn hình bắt đầu và tôi có thể tìm thấy một thư mục mới được tạo ra tạitriển khai ứng dụng windows 8

C: \ Users \ ai \ AppData \ Local \ Packages \ xxxxx_xxxxxx

Nhưng tôi không thể tìm thấy foo.exe trong thư mục này, ngay cả sau khi tôi tìm kiếm toàn bộ đĩa. Có vẻ như ứng dụng win8 có cơ chế cài đặt/triển khai khác với các chương trình windows cũ. Câu hỏi của tôi là:

(1) cách/nơi ứng dụng win8 được triển khai/cài đặt?

(2) Tôi muốn sử dụng \AppData\Local\Packages\xxxxx_xxxxxx\LocalState làm thư mục dữ liệu cục bộ (bằng ApplicationData.Current.LocalFolder trong mã), nhưng toàn bộ thư mục bị xóa khi nhấp chuột phải vào biểu tượng màn hình bắt đầu và nhấn "gỡ cài đặt". Bất kỳ nơi nào tốt hơn để lưu trữ dữ liệu cục bộ? Hoặc tôi cần SQLite? Ví dụ: ứng dụng của tôi viết tất cả các thông báo lỗi trong error.txt, rõ ràng là tôi không thể sử dụng sqlite trong trường hợp này và nếu tôi đặt error.txt trong thư mục LocalState, người dùng có thể đã gỡ cài đặt ứng dụng, trước khi tôi truy cập ứng dụng để xem nội dung trong số error.txt. Một kịch bản khác là: người dùng muốn gỡ cài đặt ứng dụng nhưng giữ dữ liệu cục bộ của mình (tệp). Rõ ràng ApplicationData.Current.LocalFolder không phải là một lựa chọn tốt.

Trả lời

4

1) Các gói Windows 8 được triển khai tới c: \ Program Files \ windowsapps \, nhưng theo mặc định bạn don không có quyền sở hữu thư mục đó và vì vậy không thể truy cập thư mục đó. Đó là phần lớn không liên quan, mặc dù. Bạn sẽ không bao giờ có quyền truy cập vào thư mục này theo thiết kế.

2) Một lần nữa, việc xóa các thư mục dữ liệu cục bộ cho một ứng dụng khi gỡ cài đặt là hành vi mong đợi. Nếu không, nếu bạn triển khai một ứng dụng thông qua cửa hàng và nó bắt đầu hoạt động sai và chiếm toàn bộ dung lượng sẵn có của bạn, sẽ không có cách nào đơn giản để người dùng xóa dữ liệu đó. Tuy nhiên, xác nhận của bạn rằng không có cảnh báo nào là không đúng sự thật. Cửa sổ bật lên gỡ cài đặt hiển thị rõ ràng "Ứng dụng này và thông tin liên quan của ứng dụng này sẽ bị xóa khỏi PC này"

Trong một số trường hợp, lưu trữ dữ liệu trong thư mục chuyển vùng có thể là một tùy chọn, nhưng thư mục này không có nhiều dữ liệu nó ở đó để giữ các tùy chọn cài đặt/cấu hình ứng dụng để chuyển vùng giữa các thiết bị. Bạn có thể đặt nhật ký sự cố của bạn vào đó trong khi dev (nếu đủ nhỏ), nhưng không có gì đảm bảo rằng nó sẽ được đồng bộ hóa với đám mây trước khi ứng dụng bị gỡ cài đặt. Đặt cược tốt nhất của bạn có lẽ sẽ là sử dụng SDK trực tiếp để đồng bộ hóa dữ liệu với đám mây, nhưng một lần nữa, bạn không đảm bảo rằng dữ liệu sẽ được ghi ngay lập tức lên đám mây.

1

Bạn nên sử dụng bộ nhớ bị cô lập để lưu trữ dữ liệu vào hệ thống tệp trên ứng dụng Windows 8 Metro. Bạn có thể tìm vị trí bằng cách sử dụng các mục sau:

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

Khi kiến ​​trúc của mỗi nền tảng thay đổi, bạn sẽ không bao giờ biết chắc chắn nơi dữ liệu của bạn sẽ được lưu trữ, nhưng hằng số này sẽ đảm bảo nó hoạt động trên tất cả các ứng dụng. Thư mục này cũng được giữ "an toàn" trong khi ứng dụng được cài đặt và nâng cấp để bạn không nên mất dữ liệu sử dụng nó.

Một ví dụ của việc này sử dụng SQLLite-net có thể được tìm thấy ở dưới cùng của trang này: http://timheuer.com/blog/archive/2012/05/20/using-sqlite-in-metro-style-app.aspx

+0

Nhưng câu hỏi của tôi là: 'Windows.Storage.ApplicationData.Current.LocalFolder' bị xóa mà không cần cảnh báo, khi người dùng nhấp chuột phải vào biểu tượng ứng dụng và chọn gỡ cài đặt. Nó không thích hợp cho ứng dụng của tôi. Tôi muốn một nơi an toàn hơn. –

+1

Ứng dụng Metro theo thiết kế không hỗ trợ trường hợp này. Dung lượng lưu trữ riêng biệt là truy cập ghi duy nhất bạn nhận được vào hệ thống tệp mà không cần triển khai trình khám phá tệp. Nếu bạn muốn lưu dữ liệu này ngay cả sau khi cài đặt sẽ phải xem xét gia tăng đồng bộ hóa nó với một "dịch vụ đám mây" và cập nhật ứng dụng khi nó được cài đặt lại. – LewisBenge

Các vấn đề liên quan