我已经使用MakeAppX将Win32应用程序转换为UWP,但它似乎无法运行。当我单击开始菜单中的图标时,除了光标上短暂显示的忙图标外,没有任何反应。
我使用Notepad ++及其所有DLL完成了相同的过程,并且工作正常(使用完全相同的清单文件,只需更改exe)
我的问题是:
编辑:
这可能是文件权限问题吗?我的应用程序需要写入' C:\ MyFolder' &安培;
在创建时创建一个文件夹,其中包含可执行文件旁边的大量文件。因此我更多地研究了this blog,讨论了转换的准备工作。我认为上述文件访问可能违反以下内容:
这看起来像是一个相当停滞的问题,我在这个假设中是否正确?
答案 0 :(得分:1)
如果您的应用正在写入安装目录,则需要更改该代码以写入本地应用数据文件夹,而不是准备指南调用。
不允许对安装目录执行写操作,以确保应用程序部署堆栈能够执行应用程序的无缝,差异更新和干净卸载。
顺便说一下,要调试应用程序启动失败,您可以在Visual Studio中执行以下操作:调试 - >其他调试目标 - >调试已安装的应用程序包 - >从已安装的应用列表中选择您的应用。
答案 1 :(得分:0)
我会保持这个简短的说明,我会尝试直截了当,所以首先要做的事情。
当我正在将win32应用程序移植到UWP时,我发现的主要问题是应用程序无法运行的权限。现在为什么会这样?我们会在一分钟内进入它。
什么是UWP应用?
因此,如果所有这些都必须是黑白的并且从他们中删除所有花哨的东西,那么它们都是exe's
。
Ther架构,设计,安装,表现出来,以便它们在应用程序sandbox
中运行。
在Windows 10计算机上试试这个:,转到" C:/程序文件并保留"显示隐藏文件夹"启用后,您将看到一个名为" Windows Apps"的文件夹。并且您没有权限访问它。您可以快速搜索Google如何让自己成为该文件夹的管理员,或者将自己添加为该文件夹的访问权限。您将看到什么?您将看到所有预装的Windows应用程序及其资产和带有一些exe的库。尝试并运行它,它会给你一个错误说明,"你只能在应用程序环境中运行程序"。请注意,这可能不是了解这一点的理想方式,但在黑白方面,这就是我在面对这个问题时所解释的。
现在我们已经找到了它的黑白版本,让我们来看看这些问题:
在UWP应用程序中,存储(本地,漫游)漫游的概念是链接到计算机中的Microsoft帐户以在其他Windows设备上提供存储数据的概念,例如:您在移动设备上的搜索历史记录边缘浏览器和PC边缘浏览器将同步。对于密码,我们有密码保险库。这保留了所有基于身份验证的数据,因此用户无需每次和每台设备登录。现在是本地存储,这是一个基于序列化格式容器的存储系统,允许您为应用程序存储小数据。例如:应用程序第一次启动bool,音乐音量偏好或类似的东西。
然后我们有anotger方式,即将数据写入文件。这个问题?与传统的wpf应用程序不同,文本文件驻留在程序包中,因此在关闭应用程序时无法使用文件操作获取文件。如果您共享数据,则只能通过电子邮件发送或上传到onedrive。
还有一个名为Temp的存储实现(仅限模板10框架),它可以帮助您仅在应用运行时保留/存储某些数据。如果您需要第1页上的某些数据,然后在第7页上使用它,则不需要将数据传递到每个页面。很方便。
您也拥有数据库,SQLite在处理大量数据方面做得非常出色。
这非常关乎存储选项,在我多年的经验中,这一切已足以涵盖所有情况。在GitHub上查看Template 10开源的存储服务,这是一项了不起的工作。
现在谈论清单,应用程序清单是必要的文件,任何遗漏的内容现在都会让你的应用程序发布或在某些情况下限制功能,例如:你还没有宣布需要使用麦克风设备,现在当你试图启动语音识别时,它会给你一个拒绝访问的错误,这会让你陷入用户拒绝访问但实际上从未生成过权限请求提示的问题由于操作系统拒绝访问麦克风,因为您的应用程序未声明需要使用麦克风。这只是一个例子。缺少视觉资产不会让您的应用获得认证。
了解您的应用程序是否运行完美的唯一方法是任务管理器,因为您已经对您的exe进行了正确诊断,您将了解应用程序将使用的处理和资源类型。这就是我的检查方式。现在,我还没有找到更好的方法。但这对我有用。
最后关于您的修改,请注意 Windows应用程序无法访问文件系统。因此,您无法访问C:/ SomeFolder或位于应用程序沙箱之外的任何文件。您可以访问的唯一内容是您的包和它内部的内容。您可以使用Uri
路径作为ms:appx-//
路径来访问应用程序上下文中的包或应用程序沙箱内的文件,例如" Assets / fonts / myFont.TTF"。
您可以访问文件系统的唯一方法是使用FilePicker
打开一个快速窗口对话框,并允许您附加文件。它返回一个StorageFile
类对象,您可以根据需要进行转换和读取。但是,如果没有FilePixker
您的应用程序开箱即用,则无法访问文件系统,也无法使用主机系统上的任何文件。
虽然我们对此表示赞同,但毫无疑问,您的应用无法访问其他应用存储的数据。存储的数据专门用于存储它的应用程序。但是,您可以使用Uri
与其他应用程序进行通信,这些应用程序称为应用程序间通信,或者如何在两个应用程序之间传输数据的快速Google搜索将为您提供一个良好的开端。此外,在Windows 10周年纪念日更新AppServices
之后,允许我们通过展示一些库和进入和退出点来访问另一个应用程序中的数据。我已经匆匆通过这个细分,因为它不是你问题的范围,但如果你需要或在评论中提问,请在网上阅读。
Nai我会推荐什么,因为你有启动时间文件和资源收集我会说WPF对你来说是一个更合适的解决方案,因为你有更多的文件系统访问权限而且你有很多可以使用你可能想用你的应用程序做的wpf(即使是地铁UI块也可用),同时它会让你保持较低的基础技术,但如果需要访问和与文件系统交互,那么我建议你坚持使用wpf。
但是,您有可能每次在应用程序启动时手动添加文件(听起来很难过),或者您可以将文件联机并获取em使用em然后在线上传更新(听起来比拾取的文件更好)在应用程序启动时)然后UWP是要走的路。
对于UWP平台的快速启动,请考虑使用模板10,因为它具有相当复杂的设置服务,文件服务,密码保险库以及大量的锅炉板代码,如果方框可供您使用。
我希望我已经能够回答您的问题,如果有任何问题可以随意使用下面的评论部分。
我很抱歉格式化,我正在使用移动设备来回答。我以后在办公室时编辑它