在UWP最终包中包含可执行文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在UWP最终包中包含可执行文件相关的知识,希望对你有一定的参考价值。

我正在编写一个调用其他可执行文件的UWP Store应用程序,例如OpenSSL和FFmpeg.exe。我成功地将它们包含在WPF应用程序中。但是,使用UWP,如何将它们构建到最终包中以上传到Windows应用商店?

我在想这些解决方案:

  1. 将所需文件(例如,FFmpeg.exe)添加到项目中。然后选择Build Action属性为'Content'并复制到Output Directory。但是这个选项似乎不可能与包含子文件夹和文件的整个文件夹(例如,OpenSSL可移植文件夹)。
  2. 编写一个方法,在程序启动时将文件(FFmpeg.exe)复制到UWP应用程序的本地文件夹中。 ...

有一个更好的方法吗?谢谢。

答案

您必须利用build powershell命令。

1 Step, Setting up

转到您的解决方案文件夹,并在该文件夹中创建一个名为“MyExeFolder”的新文件夹,放置您想要的.exe,如FFmpeg.exe

2 Step, Automating

右键单击您的条目Uwp Project并转到Properties,然后转到Build Events

在Post Build事件命令中输入:

xcopy / y / s“$(SolutionDir)MyExeFolder FFmpeg.exe”“$(SolutionDir) UWP bin x86 $(ConfigurationName) AppX ”

如果您也在为x64构建,那么您也可以使用x64添加相同的命令,而不是x86,如果要构建win32项目并在同一解决方案下对其进行分组,则必须定义相应的bin文件夹。

3 Step Executing

为了从uwp启动win32应用程序,你将不得不使用一个名为runFullTrust的功能,很难列出你必须对应用程序清单进行的所有xml修改以启用这样的功能,但是一旦你搞清楚了,你将会必须将此添加到Extension节点:

<desktop:Extension Category="windows.fullTrustProcess" 
Executable="FFmpeg.exe" />

here is more info on how to set up the manifest

一旦你完成了所有这些,你可以从你的uwp应用程序的任何地方启动你的win32部分:

try  {             
                await Windows.ApplicationModel.FullTrustProcessLauncher.LaunchFullTrustProcessForCurrentAppAsync();
            }
            catch (Exception Ex)
            {
              //failed to Launch
            }

至于进一步阅读,我建议你访问stefan wicks博客,因为他有大量的样本和关于如何通过使用.Net原生可扩展性来克服uwp限制。

以上是关于在UWP最终包中包含可执行文件的主要内容,如果未能解决你的问题,请参考以下文章

Jsp的脚本声明表达式

Jsp的脚本声明表达式

GCC 编译详解

选项卡执行android中下一个片段中存在的代码

在代码片段中包含类型转换

执行 java.io.File 或 FileInputStream 时如何引用 OSGi 包中包含的文件