visual studio plataforma development app c# xaml uwp windows-10-universal desktop-bridge

c# - studio - uwp windows 7



Error al crear el paquete de la aplicaciĆ³n con "fullTrustProcess" apuntando a un ejecutable (3)

Estoy publicando aquí porque encontré mi propia respuesta después de varias horas de investigación. ¡Con suerte, esto ayudará a otros en el futuro!

Entonces, el problema es que BackgroundProcess.exe no está incluido en el proyecto al compilar el paquete. Qué archivos se incluirán en el proyecto se define en el archivo .csproj . Ábralo en su editor de texto preferido (recuerde cerrar Visual Studio antes)

Agregue donde se definen los activos:

<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>

Para algo como esto:

<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>

Tenga en cuenta que he agregado AppServiceBridgeSample .BackgroundProcces.exe al espacio de nombres del archivo. No sé si esto es completamente necesario, pero así es como lo solucioné. Para arreglar el espacio de nombres, debe agregar AppServiceBridgeSample antes de todas las clases. Y también en las propiedades del proyecto BackgroundProcess en Aplicación> Nombre del ensamblado y espacio de nombres predeterminado, agregue la extensión.

Clase de ejemplo:

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

Y .xaml ejemplo:

<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>

Además, esto no soluciona automáticamente el error que estaba teniendo, también tiene que agregar un evento de compilación , haga clic con el botón secundario en BackgroundProcess (proyecto en VS)> propiedades> eventos de compilación> en la línea de comandos de eventos posteriores a la compilación, agregue:

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

Compile e implemente la solución y el archivo AppServiceBridgeSample.BackgroundProcess.exe debe estar presente en la raíz del proyecto UWP (visible en el explorador de archivos).

Además, actualicé a Visual Studio 15 Enterprise Preview 3 durante esta investigación, que tal vez también ayudó un poco si encontraba otros errores.

Estoy intentando implementar la aplicación de muestra para enlazar AppServices con una aplicación UWP. La muestra se ejecuta y se compila muy bien, pero cuando trato de seguir la guía para empaquetar todo, me da un error.

Enlace a la guía de embalaje

AppService Bridge Sample repository aquí.

Mensaje de error:

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.

He encontrado el fragmento de código que genera el error, pero todavía no he encontrado una solución.

Si elimino el siguiente código del archivo Package.appxmanifest , visual studio compila con éxito el paquete:

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

Pero esto también eliminará claramente el puente al proceso, que es el objetivo de este ejercicio.

Esto parece estar relacionado de alguna manera con esta pregunta, pero la diferencia es que tengo un .exe y esa pregunta parece responderlo para .dlls:

Error al crear la aplicación universal para la tienda: "Archivo de referencias de manifiesto ''MyAppName.dll'' que no forma parte de la carga útil."

(La actualización de UWP Tools no pareció solucionarlo).


No sé si es demasiado tarde para opinar sobre esto, pero estoy en el proceso de tratar de hacer algo similar. (Ejecutando un PowerShell.exe) desde una aplicación UWP. y este fue un enlace al que me refirieron otras aplicaciones relacionadas con Desktop Bridged .

En tu caso. Te indico el primer párrafo de MS Doc desde el enlace ...

Haga clic con el botón derecho en el archivo Package.appxmanifest y vea el código. Una vez dentro del archivo XML, asegúrese de agregar los siguientes espacios de nombre a la sección de paquete.

<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">


Me parece que funciona la creación del paquete. Siendo bastante desesperado, intenté usar la consola C ++ en lugar de C #, como en la muestra AppServiceBridgeSample_C ++ . Solo tuve que agregar el archivo Win32Process_CPP.exe al proyecto UWP y marcarlo como Content con Copy if newer indicador Copy if newer . Después de eso, la operación Crear paquetes de aplicaciones se realiza correctamente. Pero el simple cambio de la consola C ++ a una C # resultó en fallas otra vez, ¡bastante extraño!

Como he encontrado, el problema principal es conocido y descrito en los documentos :

Si prefiere usar un proyecto de C # para empaquetar su aplicación, debe tener en cuenta los siguientes problemas conocidos:

Los archivos binarios Win32 almacenados en la carpeta raíz del proyecto UWP se eliminan en Release. Si no usa una carpeta para almacenar sus archivos binarios de Win32, el compilador .NET Native eliminará los del paquete final, lo que generará un error de validación del manifiesto ya que no se puede encontrar el punto de entrada ejecutable.

La solución a este problema fue simple:

  1. Cree un directorio (por ejemplo, win32) en la raíz del proyecto UWP. Este es el lugar donde debe colocarse el binario de la consola ( BackgroundProcess.exe ).

    Así que obtienes, por ejemplo, c:/test/AppServiceBridgeSample/cs/UWP/win32

  2. Edite el desktop:Extension elemento de desktop:Extension en Package.appxmanifest : agregue la carpeta al valor del atributo Executable :

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

  3. Agregue el binario BackgroundProcess.exe de la carpeta recién creada a su proyecto UWP. En sus propiedades, establezca el atributo BuildAction en Content and Copy to Output Directory to Copy if newer .

El paquete ahora debe ser creado.

Nota: Si ejecuta AppCertKit (WACK) con el paquete creado, puede obtener un error debido al uso del espacio de nombres rescap (que está reservado solo para Microsoft y sus proveedores asociados, consulte aquí ). BinaryAnalyzer.AppContainerCheck probablemente también fallará debido a una llamada de binario desprotegido.