我正在编写一个UWP Store应用程序,该应用程序调用其他可执行文件,例如OpenSSL和FFmpeg.exe。我已将这些成功地包含在WPF应用程序中。但是,使用UWP,如何将它们构建到最终包中以上传到Windows应用商店?
我正在考虑以下解决方案:
将所需的文件(例如FFmpeg.exe)添加到项目中。然后将“生成操作”属性选择为“内容”,然后复制到输出目录。但是对于包含子文件夹和文件的整个文件夹(例如,OpenSSL便携式文件夹),似乎无法使用此选项。
编写一种在程序启动时将文件(FFmpeg.exe)复制到UWP应用的本地文件夹中的方法。 ...
有更好的方法吗?谢谢。
答案 0 :(得分:2)
您必须利用build powershell命令。
转到您的解决方案文件夹,然后创建一个名为“ MyExeFolder”的新文件夹。 在该文件夹中放入所需的.exe,例如FFmpeg.exe
右键单击您的输入Uwp项目并转到属性,然后转到构建事件
在发布后事件命令中输入以下内容:
xcopy / y / s“ $(SolutionDir)MyExeFolder \ FFmpeg.exe”“ $(SolutionDir)\ UWP \ bin \ x86 \ $(ConfigurationName)\ AppX \”
如果您也要为x64进行构建,那么也要为x86添加x64而不是x64,如果要一起构建win32项目并将其归为同一解决方案,则必须定义相应的bin文件夹。
要从uwp启动win32应用程序,您将必须使用称为 runFullTrust 的功能,很难列出对应用程序清单进行的所有xml修改以启用该功能。功能,但是一旦弄清楚了,就必须将其添加到“扩展”节点:
<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限制。