桌面应用程序

时间:2015-08-18 21:22:08

标签: c# wpf windows-runtime

我正在创建一个访问Windows 10 Runtime API的WPF桌面应用程序。

如果我使用 ApplicationData.Current.TemporaryFolder.CreateFileAsync() API,则会失败并显示 InvalidOperationException

HResult=-2147009196
Message=The process has no package identity. (Exception from HRESULT: 0x80073D54)

是否可以从WPF桌面应用程序中使用此API?我可以添加包标识吗?我还能在Windows桌面应用程序中创建StorageFile吗?

2 个答案:

答案 0 :(得分:0)

StorageFile类型仅支持Windows应用商店应用。使用它是因为应用程序是沙盒和内存优化的。在WPF中,您可以完全访问硬盘,因此可以将数据写入任何文件,任何您想要的位置,或者只是将它存储在进程内存中(如果它不是太大)。

我认为WPF中的等价物是使用Path.GetTempFileName获取临时文件的路径,然后使用某个文件编写器类写入磁盘。

答案 1 :(得分:0)

桌面应用程序没有包标识。您可以使用Desktop App Converter(DAC)为桌面应用生成程序包。在使用DAC将WPF exe打包为appx并安装appx后,该应用程序按预期工作。

DAC需要专业版或企业版。

但您可以直接在桌面应用中使用StorageFolder/StorageFile,而无需事先将应用转换为包。您遇到的错误是因为ApplicationData.Current映射到桌面应用程序不存在的文件夹。

这段代码使用WinRT API创建并写入临时文件夹中的文件。

var folder = await StorageFolder.GetFolderFromPathAsync(System.IO.Path.GetTempPath());
var file = await folder.CreateFileAsync("helloworld.txt");            
await FileIO.WriteTextAsync(file, "hahahaha");