7

我一直在尝试使用桌面桥将 WPF 应用程序包装在 Windows 通用应用程序中。

为了使应用程序的任务栏图标没有电镀,具有透明背景,我按照可以在各种博客和 MSDN 文章/论坛中找到的说明进行操作,例如这个

我一直在执行的第一个命令是这两个:

"C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64\makepri.exe" createconfig /o /cf priconfig.xml /dq en-US
"C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64\makepri.exe" new /o /pr . /cf priconfig.xml

这些命令在 WPF 应用程序的输出文件夹中执行,我还在其中放置了一个 AppxManifest.xml 文件,以及它引用的文件和文件夹(例如可执行文件和各种比例和分辨率的资产图像)。

从这一点开始,我得到了两个不同的奇怪错误:

首先,如果 AppManifest.xml 文件包含以下部分:

<Extensions>
<desktop2:Extension Category="windows.firewallRules">
<desktop2:FirewallRules Executable="app\MyWpfApp.exe">
<desktop2:Rule Direction="in" IPProtocol="TCP" Profile="all" />
<desktop2:Rule Direction="in" IPProtocol="UDP" Profile="all" />
</desktop2:FirewallRules>
</desktop2:Extension>
</Extensions>

那么第二个 makepri 命令将导致以下错误消息:

onecoreuap\base\mrt\tools\indexertool\src\tool\parametermanager.cpp(:908): 错误 PRI175: 0x80080204 -

onecoreuap\base\mrt\tools\indexertool\src\tool\parametermanager.cpp(:318): 错误 PRI175: 0x80080204 -

微软 (R) MakePRI 工具

版权所有 (C) 2013 微软。版权所有。

错误 PRI191:0x80080204 - Appx 清单未找到或无效。请确保存在格式正确的清单文件。或使用 /in 开关指定索引名称。

然后,如果我删除该 FirewallRules 部分,一切似乎都运行良好 - 至少在我的机器上。

其次,它并不总是按预期运行:

当我尝试在另一台机器上运行完全相同的文件(使用 AppxManifest.xml 的固定版本)和相同的命令时,我得到了与第一台机器上相同的错误(在删除 FirewallRules 部分之前)。

知道什么可能导致这些问题吗?构建机器之间的哪些可能差异会导致第二个问题?我应该寻找什么?

4

1 回答 1

3

第一个问题是通过从Package xml 元素(在 AppxManifest.xml 的根级别)中删除IgnorableNamespaces属性来解决的。

--

至于第二个问题,在就这个问题联系了微软的支持团队之后,这似乎是老系统上运行的makepri工具的一个bug:

显然,当在 Windows Server 2012 R2(可能还有其他版本)上运行时,makepri 工具命令必须提供另一个“可选”参数来说明应用程序的名称:

"C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64\makepri" new /o /pr . /cf priconfig.xml /mn AppxManifest.xml /of resources.pri /in "MyAppName"

重要的部分是行尾的/in "MyAppName"参数,尽管其他参数也可能很重要。此外,“MyAppName”必须与AppxManifest.xml文件中定义的部分相同:

<Applications>
  <Application Id="MyAppName" ...>
...

可能与解决此问题相关的另一个步骤是确保稍后用于 makeappx 命令的文件映射文件具有正确的ResourceId定义- 如本文所述

于 2017-07-30T14:18:16.437 回答