我正在尝试使用UWP应用程序部署示例应用程序以桥接AppServices。该示例运行并构建得很好但是当我尝试按照指南打包整个事情时它会给我一个错误。
AppService Bridge Sample repository here.
错误讯息:
Error Manifest validation error: Line 36, Column 64, Reason: The file name "BackgroundProcess.exe" declared for element "*[local-name()='Applications']/*[local-name()='Application']/*[local-name()='Extensions']/*[local-name()='Extension' and @Category='windows.fullTrustProcess']" doesn't exist in the package.
我发现代码片段会产生错误,但我还没有找到解决方法。
如果我删除文件 Package.appxmanifest 中的以下代码,Visual studio会成功构建软件包:
<Extensions>
<uap:Extension Category="windows.appService">
<uap:AppService Name="CommunicationService" />
</uap:Extension>
<desktop:Extension Category="windows.fullTrustProcess" Executable="BackgroundProcess.exe" />
</Extensions>
但这显然也会消除过程中的桥接,这是本练习的重点。
这似乎与这个问题有些相关,但不同之处在于我有一个.exe并且这个问题似乎是为.dll答案:
(更新UWP工具似乎无法修复它。)
答案 0 :(得分:7)
我似乎让包创建工作。非常绝望我已经尝试使用C ++控制台而不是C#,就像在AppServiceBridgeSample_C++示例中一样。我只需将Win32Process_CPP.exe
文件添加到UWP项目中,并将其标记为Content
并带有Copy if newer
标记。之后,创建应用程序包操作成功。
但只是简单地将C ++控制台改回C#控制台再次导致失败 - 非常奇怪!
正如我所发现的,主要问题是已知的并在docs中描述:
如果您更喜欢使用C#项目来打包您的应用,那么您需要这样做 了解以下已知问题:
Win32在UWP项目的根文件夹中存储的二进制文件将在Release中删除。如果您不使用文件夹来存储Win32 二进制文件,.NET Native编译器将从最终版本中删除它们 包,导致自可执行文件以来的清单验证错误 无法找到切入点。
这个问题的解决方案很简单:
在UWP项目根目录中创建目录(例如win32)。这是必须放置控制台二进制文件(BackgroundProcess.exe
)的地方。
所以你得到了c:\test\AppServiceBridgeSample\cs\UWP\win32
修改desktop:Extension
中的Package.appxmanifest
元素 - 将文件夹添加到Executable
属性值:
<desktop:Extension Category="windows.fullTrustProcess" Executable="win32\BackgroundProcess.exe" />
将新创建的文件夹中的BackgroundProcess.exe
二进制文件添加到您的UWP项目中。在其属性中,将BuildAction
属性设置为Content
,将Copy to Output Directory
设置为Copy if newer
。
现在应该创建包。
注意: 如果您使用创建的包运行AppCertKit(WACK),则可能因使用rescap
命名空间(为Microsoft保留)而失败及其合作伙伴供应商,请参阅here)。由于调用了不受保护的二进制文件,BinaryAnalyzer.AppContainerCheck
也可能会失败。
答案 1 :(得分:2)
错误的路径会导致相同的错误。
对我来说,我的错误代码是
<Extensions>
<desktop:Extension Category="windows.startupTask" EntryPoint="Windows.FullTrustApplication" Executable="ClipboardEx.exe">
<desktop:StartupTask DisplayName="ClipboardEx" Enabled="true" TaskId="ClipboardExStartUpId"/>
</desktop:Extension>
</Extensions>
我的项目目录如下:
bin
│ ├─x64
│ │ └─Release
│ │ ├─AppX
│ │ │ ├─ClipboardEx
| | | | └─ClipboardEx.exe
│ │ │ ├─Images
│ │ │ └─WinMetadata
因此,我将可执行文件从ClipboardEx.exe
更改为ClipboardEx\ClipboardEx.exe
,并成功打包。
有点像kibitzerCZ所说的。但是我不需要创建新目录,只需确保您的路径正确
答案 2 :(得分:1)
我不知道是否为时已晚,无法权衡这一点,但我正在尝试做类似的事情。 (从UWP应用程序运行PowerShell.exe)。这是有关人员Desktop Bridged apps向我推荐的一个链接。
在你的情况下。我指的是链接中的MS Doc的第一段...
右键单击Package.appxmanifest文件并查看代码。进入XML文件后,请确保将以下名称空间添加到包部分
./dfsgfd/dfs/as/ssss