我正在创建一个访问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吗?
答案 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");