Marco de compatibilidad de paquetes: corrección de directorio de trabajo

Investigación

Windows Apps redirigirá directorios específicos relacionados con la aplicación a la carpeta Windows Contenedor de aplicaciones. Si una aplicación crea una subcarpeta ( ) como parte de la instalación y posteriormente llama a esta subcarpeta, no podrá encontrar el directorio porque C:\Program Files\Vendor\subfolder no existe.

Con el marco de compatibilidad de paquetes (PSF), se pueden realizar mejoras en el paquete Windows app para resolver este problema. En primer lugar, debemos identificar el error y las rutas de acceso de directorio que solicita la aplicación.

Captura del error Windows aplicación

Filtrar los resultados es un paso opcional, que facilitará la visualización de errores relacionados con la aplicación. Para ello, crearemos dos reglas de filtro. El primero es un filtro de inclusión para el nombre del proceso de aplicación y el segundo es una inclusión de los resultados que no se han realizado correctamente.

  1. Descargue y extraiga el Monitor de procesos SysInternals en el directorio C:\PSF\ProcessMonitor.
  2. Abra Windows explorador de procesos y vaya a la carpeta del Monitor de procesos sysInternals extraída.
  3. Haga doble clic en el archivo SysInternals Process Monitor (procmon.exe) e inicie la aplicación.
  4. Si UAC lo solicita, seleccione el botón Sí.
  5. En la ventana Filtro del Monitor de procesos, seleccione el primer menú desplegable con la etiqueta Arquitectura.
  6. Seleccione Nombre del proceso en el menú desplegable.
  7. En el menú desplegable siguiente, compruebe que está establecido con el valor de es.
  8. En el campo de texto, escriba el nombre del proceso de la aplicación (ejemplo: PSFSample.exe). Ejemplo del filtro del Monitor de Windows con el nombre de la aplicación
  9. Seleccione el botón Agregar.
  10. En la ventana Filtro del Monitor de procesos, seleccione el primer menú desplegable con la etiqueta Nombre del proceso.
  11. Seleccione Resultado en el menú desplegable.
  12. En el menú desplegable siguiente, selecciónelo y seleccione no en el menú desplegable.
  13. En el campo de texto, escriba: SUCCESS. Ejemplo de filtro del Monitor de Windows con resultado
  14. Seleccione el botón Agregar.
  15. Seleccione el botón Aceptar.
  16. inicie la Windows aplicación, desencadene el error y cierre la Windows aplicación.

Revisión de los Windows de errores de la aplicación

Después de capturar los Windows app, los resultados se deben investigar para identificar si el error está relacionado con el directorio de trabajo.

  1. Revise los resultados del Monitor de procesos sysInternals y busque los errores descritos en la tabla anterior.
  2. Si los resultados muestran un resultado "Nombre no encontrado", con los detalles "Acceso deseado: ..." para la aplicación específica destinada a un directorio fuera del "C:\Archivos de programa\WindowsApps\...\" (como se muestra en la imagen siguiente), ha identificado correctamente un error relacionado con el directorio de trabajo, use el artículo Soporte técnico de PSF - Acceso al sistema de archivos para obtener instrucciones sobre cómo aplicar la corrección psf a la aplicación. Muestra el mensaje de error que aparece en el Monitor de procesos sysInternals en caso de error al escribir en el directorio.

Solución

Windows Apps redirigirá directorios específicos relacionados con la aplicación a la carpeta Windows Contenedor de aplicaciones. Si una aplicación crea una subcarpeta ( ) como parte de la instalación y posteriormente llama a esta subcarpeta, no podrá encontrar el directorio porque C:\Program Files\Vendor\subfolder no existe.

Para resolver el problema relacionado con la aplicación Windows que hace referencia a un directorio de trabajo incorrecto, debemos seguir los cuatro pasos siguientes:

  1. Almacenamiento temporal de Windows aplicación en un directorio local
  2. Creación del archivo Config.json e inyección de los archivos PSF necesarios
  3. Actualización del Windows App AppxManifest
  4. Volver a empaquetar y firmar la Windows aplicación

Los pasos anteriores proporcionan instrucciones a través de la extracción del contenido de la aplicación de Windows en un directorio local con almacenamiento temporal, la inserción de los archivos de corrección de PSF en el directorio de aplicación Windows de almacenamiento temporal, la configuración de Application Selector para que apunte al iniciador de PSF y, a continuación, la configuración del archivo PSF config.json para redirigir el iniciador de PSF a la aplicación que especifica el directorio de trabajo.

Descargar e instalar las herramientas necesarias

Este proceso le guiará a través de la recuperación y el uso de las siguientes herramientas:

  • NuGet Client Tool
  • Marco de compatibilidad de paquete
  • Windows 10 SDK (versión más reciente)
  • Monitor de procesos sysinternals

A continuación se proporcionan instrucciones paso a paso sobre cómo descargar e instalar las herramientas necesarias.

  1. Descargue la versión más reciente (no preliminar) de la herramienta clienteNuGet y guarde elnuget.exeen la carpeta .

  2. Descargue el marco de compatibilidad de paquetes con Nuget ejecutando lo siguiente desde una ventana de PowerShell administrativa:

    Set-Location "C:\PSF"
    .\nuget\nuget.exe install Microsoft.PackageSupportFramework
    
  3. Descargue e instale Windows 10 Software Development Toolkit (SDK de Win 10).

    1. Descargue el SDK de Win 10.
    2. Ejecute el winsdksetup.exe que se descargó en el paso anterior.
    3. Haga clic en el botón Siguiente.
    4. Seleccione solo las tres características siguientes para la instalación:
      • Herramientas de firma de Windows SDK para aplicaciones de escritorio
      • Windows SDK para aplicaciones de C++ para UWP
      • Localización del SDK de Windwos para aplicaciones para UWP
    5. Seleccione el botón Instalar.
    6. Seleccione el botón Aceptar.

Fase de la Windows aplicación

Al almacenamiento provisional Windows app, extraeremos o desempaquetaremos el contenido de la aplicación Windows en un directorio local. Una vez Windows app se haya desempaquetar en la ubicación de almacenamiento provisional, se pueden insertar archivos de corrección de PSF correctándose las experiencias no deseadas.

  1. Abra una ventana administrativa de PowerShell.

  2. Establezca las siguientes variables destinadas a su archivo de aplicación específico y Windows 10 versión del SDK:

    $AppPath          = "C:\PSF\SourceApp\PSFSampleApp.msix"         ## Path to the MSIX App Installer
    $StagingFolder    = "C:\PSF\Staging\PSFSampleApp"                ## Path to where the MSIX App will be staged
    $OSArchitecture   = "x$((gwmi Win32_Processor).AddressWidth)"    ## Operating System Architecture
    $Win10SDKVersion  = "10.0.19041.0"                               ## Latest version of the Win10 SDK
    
  3. Desempaquete Windows app en la carpeta de almacenamiento provisional mediante la ejecución del siguiente cmdlet de PowerShell:

    ## Sets the directory to the Windows 10 SDK
    Set-Location "${env:ProgramFiles(x86)}\Windows Kits\10\Bin\$Win10SDKVersion\$OSArchitecture"
    
    ## Unpackages the Windows App to the staging folder
    .\makeappx.exe unpack /p "$AppPath" /d "$StagingFolder"
    

Creación e inyección de archivos PSF necesarios

Para aplicar acciones correctivas a Windows App, se debe crear un archivo config.json y proporcionar información sobre el Windows App Selector que está fallando. Si hay varios Windows de aplicaciones que están experimentando problemas, el archivo config.json se puede actualizar con varias entradas.

Después de actualizar el archivo config.json, el archivo config.json y los archivos de corrección PSF compatibles se deben mover a la raíz del paquete Windows App.

  1. Abra Visual Studio Code (VS Code) o cualquier otro editor de texto.

  2. Cree un nuevo archivo; para ello, seleccione el menú Archivo en la parte superior de la VS Code y seleccione Nuevo archivo en el menú desplegable.

  3. Guarde el archivo como config.json;para ello, seleccione el menú Archivo en la parte superior de la ventana VS Code y seleccione Guardar en el menú desplegable. En la ventana Guardar como, vaya al directorio Windows App Staging(C:\PSF\Staging\PSFSampleApp)y establezca el nombre de archivo como . Seleccione el botón Guardar.

  4. Copie el código siguiente en el archivo config.json recién creado.

    {
        "applications": [
            {
                "id": "",
                "executable": "",
                "workingDirectory": ""
            }
        ],
        "processes": [
            {
                "executable": ""
            }
        ]
    }
    
  5. Abra el archivo Windows App App AppxManifest que se encuentra en la carpeta de almacenamiento provisional Windows App (C:\PSF\Staging\PSFSampleApp\AppxManifest.xml) mediante VS Code u otro editor de texto.

    <Applications>
        <Application Id="PSFSAMPLE" Executable="VFS\ProgramFilesX64\PS Sample App\PSFSample.exe" EntryPoint="Windows.FullTrustApplication">
        <uap:VisualElements BackgroundColor="transparent" DisplayName="PSFSample" Square150x150Logo="Assets\StoreLogo.png" Square44x44Logo="Assets\StoreLogo.png" Description="PSFSample">
            <uap:DefaultTile Wide310x150Logo="Assets\StoreLogo.png" Square310x310Logo="Assets\StoreLogo.png" Square71x71Logo="Assets\StoreLogo.png" />
        </uap:VisualElements>
        </Application>
    </Applications>
    
  6. Copie el valor del campo Id. situado en elAppxManifest.xmlubicado en en el campo Id. de aplicaciones del archivo config.json. Imagen que rodea la ubicación del identificador en el archivo AppxManifest.

  7. Copie la ruta de acceso relativa al paquete del campo Ejecutable que se encuentra en el archivo AppxManifest.xml ubicado en en el campo Ejecutable de aplicaciones del archivo config.json. Imagen que rodea la ubicación del ejecutable dentro del archivo AppxManifest.

  8. Copie la ruta de acceso primaria relativa al paquete del campo Ejecutable que se encuentra en el archivo AppxManifest.xml ubicado en en el campo Applications WorkingDirectory del archivo config.json. Imagen que rodea la ubicación del directorio de trabajo dentro del archivo AppxManifest.

  9. Copie el nombre del ejecutable del campo Ejecutable situado en elAppxManifest.xmlubicado en en el campo Ejecutable de procesos del archivo config.json. Imagen que rodea la ubicación del archivo ejecutable del proceso en el archivo AppxManifest.

  10. Guarde el archivo config.json actualizado.

    {
        "applications": [
            {
            "id": "PSFSample",
            "executable": "VFS/ProgramFilesX64/PS Sample App/PSFSample.exe",
            "workingDirectory": "VFS/ProgramFilesX64/PS Sample App/"
            }
        ],
        "processes": [
            {
            "executable": "PSFSample"
            }
        ]
    }
    
  11. Copie los tres archivos siguientes del marco de compatibilidad de paquetes basado en la arquitectura ejecutable de la aplicación en la raíz de la aplicación Windows aplicación. Los archivos siguientes se encuentran en .\Microsoft.PackageSupportFramework. Versión > \bin.

    Aplicación (x64) Aplicación (x86)
    PSFLauncher64.exe PSFLauncher32.exe
    PSFRuntime64.dll PSFRuntime32.dll
    PSFRunDll64.exe PSFRunDll32.exe

Actualización de AppxManifest

Después de crear y actualizar el archivo config.json, elAppxManifest.xmlde la aplicación de Windows debe actualizarse para cada Windows App Selector incluido en config.json. Las aplicaciones de AppxManifestahora deben tener como destino laPSFLauncher.exe asociada a la arquitectura de aplicaciones.

  1. Abra Explorador de archivos y vaya a la carpeta Aplicación MSIX provisional (C:\PSF\Staging\PSFSampleApp).

  2. Haga clic con el botón derecho enAppxManifest.xmly seleccione Abrir con Code en el menú desplegable (opcionalmente, puede abrir con otro editor de texto).

  3. Actualice el AppxManifest.xml con la siguiente información:

    <Package ...>
    ...
    <Applications>
        <Application Id="PSFSample"
                    Executable="PSFLauncher32.exe"
                    EntryPoint="Windows.FullTrustApplication">
        ...
        </Application>
    </Applications>
    </Package>
    

Volver a empaquetar la aplicación

Se han aplicado todas las correcciones, ahora la aplicación de Windows se puede volver a empaquetar en un MSIX y firmarse mediante un certificado de firma de código.

  1. Abra una ventana administrativa de PowerShell.

  2. Establezca las siguientes variables:

    $AppPath          = "C:\PSF\SourceApp\PSFSampleApp_Updated.msix" ## Path to the MSIX App Installer
    $CodeSigningCert  = "C:\PSF\Cert\CodeSigningCertificate.pfx"     ## Path to your code signing certificate
    $CodeSigningPass  = "<Password>"                                 ## Password used by the code signing certificate
    $StagingFolder    = "C:\PSF\Staging\PSFSampleApp"                ## Path to where the MSIX App will be staged
    $OSArchitecture   = "x$((gwmi Win32_Processor).AddressWidth)"    ## Operating System Architecture
    $Win10SDKVersion  = "10.0.19041.0"                               ## Latest version of the Win10 SDK
    
  3. Vuelva a empaquetar Windows aplicación de almacenamiento provisional mediante la ejecución del siguiente cmdlet de PowerShell:

    Set-Location "${env:ProgramFiles(x86)}\Windows Kits\10\Bin\$Win10SDKVersion\$OSArchitecture"
    .\makeappx.exe pack /p "$AppPath" /d "$StagingFolder"
    
  4. Firme la Windows aplicación mediante la ejecución del siguiente cmdlet de PowerShell:

    Set-Location "${env:ProgramFiles(x86)}\Windows Kits\10\Bin\$Win10SDKVersion\$OSArchitecture"
    .\signtool.exe sign /v /fd sha256 /f $CodeSigningCert /p $CodeSigningPass $AppPath