5

当我在Visual Studio 2012 RC 中编译我的应用程序时,我可以看到bin\项目源文件夹中按预期生成了一个文件夹,其中有一个foo.exe,看起来像应用程序的入口。当我开始调试应用程序时,它的图标显示在开始屏幕上,我可以在

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

但是我在这个文件夹中找不到 foo.exe,即使我搜索了整个磁盘。似乎 win8 应用程序具有与旧 Windows 程序不同的安装/部署机制。我的问题是:

(1) 如何/在哪里部署/安装 win8 应用程序?

(2)我想\AppData\Local\Packages\xxxxx_xxxxxx\LocalState用作本地数据文件夹(相当于ApplicationData.Current.LocalFolder代码中的),但是当右键单击开始屏幕图标并按“卸载”时,整个文件夹被删除,没有任何警告。有更好的地方存储本地数据吗?或者我需要 SQLite?例如,我的应用程序将所有崩溃消息写入error.txt,显然这种情况下我不能使用 sqlite ,如果我放入error.txtLocalState 文件夹,用户可能已经卸载了该应用程序,然后我去找他看看里面有什么error.txt。另一种情况是:用户想要卸载应用程序,但保留他的本地数据(文件)。显然 ApplicationData.Current.LocalFolder 不是一个好的选择。

4

2 回答 2

4

1) Windows 8 软件包部署到 c:\Program Files\windowsapps\,但默认情况下您没有该文件夹的所有权,因此无法访问它。不过,这在很大程度上无关紧要。根据设计,您永远不应访问此文件夹。

2) 同样,在卸载时删除应用程序的本地数据文件夹是预期行为。否则,如果您通过商店部署了一个应用程序并且它开始出现异常并占用了您所有可用的存储空间,那么用户将没有简单的方法来删除该数据。但是,您关于没有警告的断言是不正确的。卸载弹出窗口清楚地显示“此应用程序及其相关信息将从这台 PC 中删除”

在某些情况下,将数据存储在漫游文件夹中可能是一种选择,但此文件夹不打算存储大量数据 - 它用于保存应用程序设置/配置选项以在设备之间漫游。您可能会在开发期间将您的崩溃日志放在那里(如果它足够小),但不能保证它会在应用程序被卸载之前同步到云端。您最好的选择可能是使用 Live SDK 将数据同步到云端,但同样,您无法保证数据会立即写入云端。

于 2012-08-13T15:02:01.993 回答
1

您应该使用隔离存储将数据持久保存到 Windows 8 Metro 应用程序的文件系统中。您可以使用以下方法找到该位置:

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

随着每个平台的架构发生变化,您将永远无法确定您的数据将存储在哪里,但这个常数将确保它适用于所有应用程序。在安装和升级应用程序时,此文件夹也保持“安全”,因此您不应丢失使用它的数据。

可以在此页面底部找到使用 SQLLite-net 的示例:http: //timheuer.com/blog/archive/2012/05/20/using-sqlite-in-metro-style-app.aspx

于 2012-08-13T07:32:49.397 回答