1

我编写了一个 .Net Core 应用程序和一个 C# UWP 应用程序,它使用 FullTrustProcessLauncher 运行第一个应用程序。当我在 UWP 应用程序的 Postbuild 中对第一个应用程序的可执行文件使用 xcopy 时,可执行文件被添加到 Appx 目录,并且可以从 UWP 应用程序执行。但是,如果我使用 Visual Studio 2019 发布 UWP,则第一个应用程序不包含在 AppPackage 中。

我还尝试将可执行文件直接添加到 UWP 项目中,其中包含内容并复制曾经的属性,但这也不起作用:(

此外,我尝试创建一个 Windows 应用程序打包项目并为这两个项目添加了一个引用,但是当我尝试启动第一个应用程序时,引发了 Appx 包的无效清单的异常。

谁能告诉我我必须做些什么来解决这个问题?

4

2 回答 2

0

谢谢您的答复。我试过了,但是当我通过 Visual Studio 运行 UWP 应用程序时,AppX 中缺少 firstApp.exe。因此,我使用两个 xcopy 命令将 5 个文件(firstApp.exe、firstApp.dll、firstApp.pdb、、firstApp.runtimeconfig.dev.json 和 firstApp.runtimeconfig.json)也复制到 AppX 和 dotnetapp 目录中。

xcopy /Y $(ProjectDir)firstApp\bin\$(ConfigurationName)\netcoreapp3.1\firstApp.* $(TargetDir)AppX\
xcopy /Y $(ProjectDir)firstApp\bin\$(ConfigurationName)\netcoreapp3.1\firstApp.* $(TargetDir)\..\..\..\dotnetapp

之后,UWP 应用再次能够启动 firstApp。但是当我生成应用程序包时,我收到以下消息:

  • 已复制 5 个文件
  • MakeAppx:错误:清单验证错误:第 29 行,第 64 列,原因:为元素“ [local-name()='Applications']/ [local-name()='Application'声明的文件名“firstApp.exe” ]/ [local-name()='Extensions']/ [local-name()='Extension' and not(@Category='windows.backgroundTasks' or @Category='windows.appService')]" 没有存在于包中。
  • MakeAppx:错误:清单验证错误:第 29 行,第 64 列,原因:为元素“ [local-name()='Applications']/ [local-name()='Application'声明的文件名“firstApp.exe” ]/ [local-name()='Extensions']/ [local-name()='Extension' 和 @Category='windows.fullTrustProcess']" 包中不存在。
  • MakeAppx:错误:包创建失败。
  • MakeAppx:错误:0x80080204 - 指定的包格式无效:包清单无效。

在包生成失败后,我查看了 AppX 文件夹并看到它还包含 dotnetapp 目录。所以我将 Executable="firstApp.exe" 更改为 Executable="dotnetapp/firstApp.exe" 并再次尝试,它成功了!

之后我添加了

xcopy /Y $(ProjectDir)OpenMVGPipeline\bin\$(ConfigurationName)\netcoreapp3.1\firstApp.* $(TargetDir)\..\..\..\dotnetapp

到 <PreBuildEvent> 并将两个 <PostBuildEvent> 条目替换为

xcopy /Y $(TargetDir)\..\..\..\dotnetapp $(TargetDir)AppX\

非常感谢您的帮助!

于 2020-07-02T13:27:49.703 回答
0

看来您没有将第一个应用程序 exe 添加到包项目中。

  1. 在名为 dotnetapp 的包项目中创建一个文件夹来存储第一个应用程序 exe
  2. 在第一个应用程序的后期构建中将第一个应用程序 exe 和相关 dll 或其他内容复制到文件夹 dotnetapp 中
  3. 转到文件夹并运行第一个应用程序并确保它正常运行
  4. 在包项目中使 dotnetapp 中的每个文件“始终复制”
  5. 在 Package.appxmanifest 中添加 Category="windows.fullTrustProcess" 和 Executable="firstApp.exe"
  6. uwp 中的 LaunchFullTrustProcessForCurrentAppAsync
  7. 发布并安装它
  8. 检查 C:\Program Files\WindowsApps\package_series_name\dotnetapp,确保您的第一个应用程序存在

它应该可以正常工作。如果没有,请查看https://github.com/vincent1000/uwp-call-win32以获取示例。

于 2020-07-02T09:49:04.340 回答