Windows 8应用程序的部署

5
当我在Visual Studio 2012 RC中编译我的应用程序时,我可以看到生成了一个位于项目源文件夹中的bin\文件夹,其中有一个foo.exe,看起来像是应用程序的入口。当我开始调试应用程序时,它的图标被放置在启动屏幕上,并且我可以在C:\Users\someone\AppData\Local\Packages\xxxxx_xxxxxx中找到一个新建的文件夹。
但是,即使我搜索整个磁盘,也找不到这个文件夹中的foo.exe。似乎win8应用程序有与旧版Windows程序不同的安装/部署机制。我的问题是:
(1)win8应用程序在何处部署/安装?
(2)我想将用作本地数据文件夹(等同于代码中的),但是在右键点击启动屏幕图标并按“卸载”时,整个文件夹会被删除,而没有任何警告。是否有更好的地方存储本地数据?或者我需要SQLite?例如,我的应用程序将所有崩溃消息写入,显然我不能在这种情况下使用sqlite,如果我将放在LocalState文件夹中,用户可能已经卸载了应用程序,而我去查看之前。另一种情况是:用户想要卸载应用程序,但保留他的本地数据(文件)。显然,ApplicationData.Current.LocalFolder不是一个好选择。
2个回答

4

1) Windows 8程序包部署在c:\Program Files\windowsapps\,但默认情况下,您没有该文件夹的所有权,因此无法访问它。尽管如此,这基本上是无关紧要的。按设计,您不应该访问此文件夹。

2) 再次,卸载应用程序时删除本地数据文件夹是预期行为。否则,如果您通过商店部署了应用程序,并且它开始出现问题并占用了所有可用存储空间,则用户将没有简单的方法来删除该数据。然而,您所说的没有警告是不正确的。卸载弹出窗口清楚地表示“此应用程序及其相关信息将从此PC中删除”

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


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


但我的问题是:当用户右键单击应用程序图标并选择卸载时,Windows.Storage.ApplicationData.Current.LocalFolder会被无警告删除。这对我的应用程序不太合适。我想要一个更安全的地方。 - Cheng Chen
1
Metro应用程序从设计上不支持此场景。隔离存储是您在不实现文件浏览器的情况下获得对文件系统的唯一写访问权限。如果您想在安装后保存这些数据,必须考虑将其逐步同步到“云服务”并在重新安装时更新应用程序。 - LewisBenge

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接