使用指向可执行文件的“fullTrustProcess”创建应用程序包时出错

我正在尝试使用UWP应用程序部署示例应用程序以桥接AppServices。 该示例运行并构建得很好,但是当我尝试按照指南打包整个事情时,它给了我一个错误。

链接到包装指南

这里是AppService Bridge示例存储库。

错误信息:

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将成功构建包:

       

但这显然也会消除过程中的桥接,这是本练习的重点。

这似乎与这个问题有些相关,但不同之处在于我有一个.exe并且这个问题似乎是为了回答它.dlls:

为商店构建通用应用程序时出错:“清单引用文件’MyAppName.dll’,它不是有效负载的一部分。”

(更新UWP工具似乎没有解决它。)

我在这里发帖是因为经过几个小时的调查后我找到了自己的答案。 希望这将有助于未来的其他人!

所以问题是构建包时BackgroundProcess.exe不包含在项目中。 要包含在项目中的文件在.csproj文件中定义。 在首选的文本编辑器中打开它(记得先关闭Visual Studio)

添加定义资产的位置:

           

对于这样的事情:

           Always   

请注意,我已经添加了AppServiceBridgeSample .BackgroundProcces.exe来确定文件的命名空间。 我不知道这是否完全必要,但这就是我修复它的方法。 因此,要修复名称空间,必须在所有类之前添加AppServiceBridgeSample 。 并且还在Application> Assembly name&Default namespace下的BackgroundProcess项目的属性中添加扩展名。

示例类:

 namespace AppServiceBridgeSample.BackgroundProcess { class Program { .... } } 

.xaml示例:

  ...  

此外,这不会自动修复我遇到的错误,您还必须添加一个构建事件 ,右键单击BackgroundProcess(VS中的项目)>属性>构建事件>在Post-Build事件命令行下添加:

 xcopy /y /s "$(TargetPath)" "$(SolutionDir)UWP" 

构建和部署解决方案,AppServiceBridgeSample.BackgroundProcess.exe文件应存在于UWP项目根目录中(在文件资源管理器中可见)。

此外,我在此次调查期间更新了Visual Studio 15 Enterprise Preview 3,如果您遇到其他错误,也可能会有所帮助。

我似乎让包创建工作。 非常绝望我已经尝试使用C ++控制台而不是C#,就像AppServiceBridgeSample_C ++示例一样。 我只需要将Win32Process_CPP.exe文件添加到UWP项目,并将其标记为Content with Copy if newer flag。 之后, Create App Packages操作成功。 但只是简单地将C ++控制台改回C#控制台再次导致失败 – 非常奇怪!

正如我所发现的,主要问题是已知的并在文档中描述:

如果您更喜欢使用C#项目来打包应用程序,则需要了解以下已知问题:

存储在UWP项目的根文件夹中的Win32二进制文件将在Release中删除。 如果您不使用文件夹来存储Win32二进制文件,.NET Native编译器将从最终包中删除它们,从而导致清单validation错误,因为找不到可执行入口点。

这个问题的解决方案很简单:

  1. 在UWP项目根目录中创建目录(例如win32)。 这是必须放置控制台二进制文件( BackgroundProcess.exe )的位置。

    所以你得到例如c:\test\AppServiceBridgeSample\cs\UWP\win32

  2. 编辑desktop:Extension Package.appxmanifest desktop:Extension元素 – 将文件夹添加到Executable属性值:

  3. BackgroundProcess.exe二进制文件从新创建的文件夹添加到UWP项目。 在其属性中,将BuildAction属性设置为“ ContentCopy to Output Directory为“ Copy if newer

现在应该创建包。

注意:如果使用创建的包运行AppCertKit(WACK),则可能由于使用rescap命名空间(仅为Microsoft及其合作伙伴供应商保留,请参见此处 )而失败。 由于调用了不受保护的二进制文件, BinaryAnalyzer.AppContainerCheck也可能会失败。

我不知道是否为时已晚,无法权衡这一点,但我正在尝试做类似的事情。 (从UWP应用程序运行PowerShell.exe)。 这是一个与其他人有关的桌面桥接应用程序的链接 。

在你的情况下。 我指的是链接中MS Doc的第一段……

右键单击Package.appxmanifest文件并查看代码。 进入XML文件后,请确保将以下名称空间添加到包部分