2016-08-11 1 views
10

Je tente de déployer l'exemple d'application pour la mise en relation de AppServices avec une application UWP. L'échantillon fonctionne et se construit très bien mais quand j'essaye de suivre le guide pour emballer le tout cela me donne une erreur.Erreur lors de la création du package d'application avec "fullTrustProcess" pointant vers un exécutable

Link to the packaging guide

AppService Bridge Sample repository here.

Message d'erreur:

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. 

J'ai trouvé le bout de code génère l'erreur, mais je ne l'ai pas trouvé une solution pour le moment.

Si je supprimer le code suivant à partir du fichier Package.appxmanifest, studio visuel construit avec succès le paquet:

<Extensions> 
    <uap:Extension Category="windows.appService"> 
    <uap:AppService Name="CommunicationService" /> 
    </uap:Extension> 
    <desktop:Extension Category="windows.fullTrustProcess" Executable="BackgroundProcess.exe" /> 
</Extensions> 

Mais cela supprimera aussi clairement la transition au processus qui est l'ensemble point de cet exercice.

Cela semble être quelque peu liée à cette question, mais la différence est que j'ai un .exe et cette question semble répondre pour .DLLs:

Error when building universal app for the store: "Manifest references file 'MyAppName.dll' which is not part of the payload."

(Mise à jour Outils UWP n'a pas l'air de le réparer.)

Répondre

5

Je poste ici parce que j'ai trouvé ma propre réponse après plusieurs heures d'enquête. Espérons que cela aidera les autres à l'avenir!

Donc le problème est que BackgroundProcess.exe n'est pas inclus dans le projet lors de la construction du paquet. Les fichiers à inclure dans le projet sont définis dans le fichier .csproj. Ouvrez-le dans votre éditeur de texte préféré (souvenez-vous de fermer Visual Studio avant)

Ajouter où les actifs sont définis:

<ItemGroup> 
    <Content Include="Properties\Default.rd.xml" /> 
    <Content Include="Assets\LockScreenLogo.scale-200.png" /> 
    <Content Include="Assets\SplashScreen.scale-200.png" /> 
    <Content Include="Assets\Square150x150Logo.scale-200.png" /> 
    <Content Include="Assets\Square44x44Logo.scale-200.png" /> 
    <Content Include="Assets\Square44x44Logo.targetsize-24_altform-unplated.png" /> 
    <Content Include="Assets\StoreLogo.png" /> 
    <Content Include="Assets\Wide310x150Logo.scale-200.png" /> 
</ItemGroup> 

à quelque chose comme ceci:

<ItemGroup> 
    <Content Include="Properties\Default.rd.xml" /> 
    <Content Include="Assets\LockScreenLogo.scale-200.png" /> 
    <Content Include="Assets\SplashScreen.scale-200.png" /> 
    <Content Include="Assets\Square150x150Logo.scale-200.png" /> 
    <Content Include="Assets\Square44x44Logo.scale-200.png" /> 
    <Content Include="Assets\Square44x44Logo.targetsize-24_altform-unplated.png" /> 
    <Content Include="Assets\StoreLogo.png" /> 
    <Content Include="Assets\Wide310x150Logo.scale-200.png" /> 
    <Content Include="AppServiceBridgeSample.BackgroundProcess.exe"> 
    <CopyToOutputDirectory>Always</CopyToOutputDirectory> 
    </Content> 
</ItemGroup> 

Notez que j'ai ajouté AppServiceBridgeSample .BackgroundProcces.exe ass l'espace de noms du fichier. Je ne sais pas si c'est absolument nécessaire mais c'est ainsi que je l'ai réparé. Donc, pour corriger l'espace de noms, vous devez ajouter AppServiceBridgeSample avant toutes les classes. Et également dans les propriétés du projet BackgroundProcess sous Application> Nom de l'assembly & L'espace de noms par défaut ajoute l'extension.

Exemple Classe:

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

Et .xaml exemple:

<Page 
    x:Class="AppServiceBridgeSample.UWP.MainPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="using:AppServiceBridgeSample.UWP" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    x:Name="Main" 
    mc:Ignorable="d"> 
    ... 
</Page> 

Aussi cela ne résout pas automatiquement l'erreur que je faisais, vous devez aussi ajouter un Créer événement, faites un clic droit sur BackgroundProcess (projet dans VS)> properties> Build Events> Sous la ligne de commande des événements Post-Build ajouter:

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

Générez et déployez la solution et le fichier AppServiceBridgeSample.BackgroundProcess.exe doit être présent dans la racine du projet UWP (visible dans l'explorateur de fichiers).

En outre, j'ai mis à jour Visual Studio 15 Enterprise Preview 3 au cours de cette enquête qui peut-être également aidé un peu si vous rencontrez d'autres erreurs.

+0

J'ai suivi vos démarches mais je n'ai toujours pas pu déployer l'application. Si vous avez encore une solution déployable. Pourriez-vous s'il vous plaît partager en ligne. – Harsha

1

Je ne sais pas s'il est trop tard pour peser sur cela, mais je suis en train d'essayer de faire quelque chose de similaire. (Exécution d'un PowerShell.exe) à partir d'une application UWP. et c'était un lien référé à moi par quelqu'un d'autre concerné Desktop Bridged apps.

Dans votre cas. Je vous dirige vers le premier paragraphe de MS Doc à partir du lien ...

Cliquez avec le bouton droit sur le fichier Package.appxmanifest et affichez le code. Une fois dans le fichier XML assurez-vous ajouter les espaces de noms suivants à la section du paquet

 <Package 
     ... 
     xmlns:uap2="http://schemas.microsoft.com/appx/manifest/uap/windows10/2" 
     xmlns:uap3="http://schemas.microsoft.com/appx/manifest/uap/windows10/3" 
     xmlns:desktop="http://schemas.microsoft.com/appx/manifest/desktop/windows10" 
     ... 
     IgnorableNamespaces="uap uap2 uap3 mp rescap desktop"> 
6

me semble pour obtenir la création d'un package de travail. Étant déjà assez désespéré j'ai essayé d'utiliser la console C++ au lieu de C#, comme dans l'exemple AppServiceBridgeSample_C++. J'ai seulement dû ajouter le fichier Win32Process_CPP.exe au projet UWP et le marquer comme Content avec le drapeau. Après cela, l'opération Create App Packages réussit. Mais simplement changer la console C++ en C# a abouti à l'échec à nouveau - assez étrange!

Comme je l'ai trouvé, le principal problème est connu et décrit dans docs:

Si vous préférez utiliser un projet C# pour emballer votre application, vous devez être au courant des problèmes connus suivants: Win32 Les binaires stockés dans le dossier racine du projet UWP sont supprimés dans Release. Si vous n'utilisez pas un dossier pour stocker vos binaires Win32 , le compilateur .NET natif supprimera ceux du package final , ce qui entraînera une erreur de validation du manifeste puisque le point d'entrée exécutable est introuvable.

solution à ce problème est simple:

  1. Créer un répertoire (par exemple win32) dans la racine du projet UWP. C'est l'endroit où le binaire de la console (BackgroundProcess.exe) doit être placé.

    Ainsi, vous obtenez par ex.c:\test\AppServiceBridgeSample\cs\UWP\win32

  2. Modifier l'élément desktop:Extension dans Package.appxmanifest - ajouter le dossier à la valeur d'attribut Executable:

    <desktop:Extension Category="windows.fullTrustProcess" Executable="win32\BackgroundProcess.exe" />

  3. Ajouter le BackgroundProcess.exe binaire du dossier nouvellement créé à votre projet UWP. Dans ses propriétés, définissez l'attribut BuildAction sur Content et Copy to Output Directory sur Copy if newer.

Le package doit maintenant être créé.

Note: Si vous exécutez AppCertKit (WACK) avec le package créé, vous pouvez obtenir une défaillance due à l'utilisation de l'espace de noms rescap (qui est réservé pour Microsoft et ses fournisseurs partenaires seulement, voir here). Le BinaryAnalyzer.AppContainerCheck échouera probablement aussi, en raison de l'appel de binaire non protégé.

+0

Un grand merci pour cette solution. Très facile et efficace. – Caesar