这是我第一次制作Windows Universal应用程序而且我无法在我的UWP应用程序中创建所有内容(例如,无法启动命令行进程)。由于这是一个个人应用程序(我不想把它放在商店)我使用windows.fullTrustProcess启动WPF win32应用程序来制作我在主应用程序中无法做到的事情。我也被迫使用UWP因为我需要一个能够播放全屏html5视频的WebView。
当我尝试在Visual Studio 2017中使用我的应用程序时,一切正常,但当我尝试制作包时,我收到此错误:
“清单验证错误:第28行,第64列,原因:为元素” [local-name()='Applications'] / [local-name()='Application'] / [local-name()='Extensions'] / [local-name()='Extension'和@ Category ='windows.fullTrustProcess ']“包中不存在。”
但我的“Backend-Mini-Browser.exe”位于“.. \ bin \ x64 \ Debug \ AppX”文件夹中,一切都在Visual Studio 2017中运行。
这是我的appxmanifest:
<?xml version="1.0" encoding="utf-8"?>
<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities" xmlns:desktop="http://schemas.microsoft.com/appx/manifest/desktop/windows10" IgnorableNamespaces="uap mp desktop rescap">
<Identity Name="2579cda2-1e8c-48ee-829a-b1d276066cfe" Publisher="CN=Certimeter" Version="1.0.3.0" />
<mp:PhoneIdentity PhoneProductId="2579cda2-1e8c-48ee-829a-b1d276066cfe" PhonePublisherId="00000000-0000-0000-0000-000000000000" />
<Properties>
<DisplayName>Mini-browser</DisplayName>
<PublisherDisplayName>Certimeter</PublisherDisplayName>
<Logo>Assets\StoreLogo.png</Logo>
</Properties>
<Dependencies>
<TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.0.0" MaxVersionTested="10.0.0.0" />
</Dependencies>
<Resources>
<Resource Language="x-generate" />
</Resources>
<Applications>
<Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="Mini_browser.App">
<uap:VisualElements DisplayName="Mini-browser" Square150x150Logo="Assets\Square150x150Logo.png" Square44x44Logo="Assets\Square44x44Logo.png" Description="Mini-browser" BackgroundColor="transparent">
<uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png">
</uap:DefaultTile>
<uap:SplashScreen Image="Assets\SplashScreen.png" />
</uap:VisualElements>
<Extensions>
<desktop:Extension Category="windows.fullTrustProcess" Executable="Backend-Mini-Browser.exe" />
</Extensions>
</Application>
</Applications>
<Capabilities>
<Capability Name="internetClient" />
<uap:Capability Name="picturesLibrary" />
<rescap:Capability Name="runFullTrust" />
</Capabilities>
</Package>
下面:
<rescap:Capability Name="runFullTrust" />
我有一个警告: 名称空间“http://schemas.microsoft.com/appx/manifest/foundation/windows10”中的元素“Capabilities”在名称空间“http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities”中具有无效的子“Capability”。可能的列表:命名空间“http://schemas.microsoft.com/appx/manifest/foundation/windows10”中的“CapabilityChoice”和命名空间“http://schemas.microsoft.com/appx/manifest/uap/windows10”中的“Capability”和命名空间“http://schemas.microsoft.com/appx/manifest/foundation/windows10”中的“Capability”和“Capability”in命名空间“http://schemas.microsoft.com/appx/manifest/uap/windows10/4”中的命名空间“http://schemas.microsoft.com/appx/manifest/uap/windows10/3”和“Capability”以及命名空间“http://schemas.microsoft.com/appx/manifest/uap/windows10/2”中的“Capability”和“http://schemas.microsoft.com/appx/manifest/foundation/windows10”中的“CustomCapabilityChoice”名称空间“http://schemas.microsoft.com/appx/manifest/uap/windows10/4”中的“和”CustomCapability“和名称空间”http://schemas.microsoft.com/appx/manifest/foundation/windows10“中的”DeviceCapability“。
(这个警告用英语翻译,但我不认为这是主要问题。)
答案 0 :(得分:5)
您需要做的两件事:
1)将完整信任EXE放在包的子文件夹中,而不是包根
2)在UWP项目中明确包含.EXE文件
对于#2,在解决方案资源管理器中选择“显示所有文件”,然后右键单击.EXE文件并选择“包含在项目中”。
以下是您可以与之比较的示例: https://github.com/Microsoft/DesktopBridgeToUWP-Samples/tree/master/Samples/UWP%20Systray
修改强> 自从我第一次回答这个问题后,自VS支持以来更新我的答案已经变得更好。我已经制作了几篇博客文章和样本,以进一步说明如何使用VS 2017的最新更新来实现这一目标:
https://stefanwick.com/2018/04/06/uwp-with-desktop-extension-part-1/