C# windows 8应用程序的部署

C# windows 8应用程序的部署,c#,windows-8,local-storage,C#,Windows 8,Local Storage,当我在visual studio 2012 RC中编译我的应用程序时,我可以看到在项目源文件夹中按预期生成的bin\文件夹,其中有一个foo.exe,看起来像应用程序的条目。当我开始调试应用程序时,它的图标会显示在“开始”屏幕上,我可以找到在上创建的新文件夹 C:\Users\someone\AppData\Local\Packages\xxxxx\uxxxxxx 但是我在这个文件夹中找不到foo.exe,即使我搜索了整个磁盘。看起来win8应用程序的安装/部署机制与旧的windows程序不同。

当我在visual studio 2012 RC中编译我的应用程序时,我可以看到在项目源文件夹中按预期生成的
bin\
文件夹,其中有一个foo.exe,看起来像应用程序的条目。当我开始调试应用程序时,它的图标会显示在“开始”屏幕上,我可以找到在上创建的新文件夹

C:\Users\someone\AppData\Local\Packages\xxxxx\uxxxxxx

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

(1) win8应用程序的部署/安装方式/位置


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

在Windows 8 Metro应用程序上,应该使用独立存储将数据持久化到文件系统。您可以使用以下命令找到位置:

Windows.Storage.ApplicationData.Current.LocalFolder.Path

随着每个平台体系结构的变化,您将永远无法确定数据将存储在何处,但此常量将确保数据在所有应用程序中都能正常工作。在安装和升级应用程序时,此文件夹也会保持“安全”,因此您在使用它时不应丢失数据

在本页底部可以找到使用SQLLite net的示例:

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

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


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

但我的问题是:
Windows.Storage.ApplicationData.Current.LocalFolder
会在用户右键单击应用程序图标并选择卸载时被删除而不发出警告。它不适合我的应用程序。我想要一个更安全的地方。Metro应用程序的设计不支持这种情况。隔离存储是您在不实现文件资源管理器的情况下对文件系统进行的唯一写入访问。如果您想在安装之后保存此数据,则必须考虑将其增量同步到“云服务”,并在重新安装时更新应用程序。