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

Investigación

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

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

Captura del error de la aplicación Windows

El filtrado de los resultados es un paso opcional que facilita la visualización de errores relacionados con la aplicación. Para ello, crearemos dos reglas de filtro. El primer 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 realizan correctamente.

  1. Descargue y extraiga el Monitor de procesos de SysInternals en el directorio C:\PSF\ProcessMonitor .
  2. Abra Windows Explorador y vaya a la carpeta SysInternals Process Monitor extraída.
  3. Haga doble clic en el archivo SysInternals Process Monitor (procmon.exe), iniciando la aplicación.
  4. Si UAC lo solicita, seleccione el botón .
  5. En la ventana Filtro del Monitor de procesos, seleccione el primer menú desplegable etiquetado con Arquitectura.
  6. Seleccione Nombre de proceso en el menú desplegable.
  7. En el menú desplegable siguiente, compruebe que se establece con el valor de es .
  8. En el campo de texto, escriba el nombre del proceso de la aplicación (ejemplo: PSFSample.exe). Example of the Process Monitor Filter Windows with App Name
  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 está en el menú desplegable.
  13. En el campo de texto, escriba SUCCESS. Example of the Process Monitor Filter Windows with Result
  14. Seleccione el botón Agregar.
  15. Seleccione el botón Aceptar.
  16. inicie la aplicación Windows, desencadene el error y cierre la aplicación Windows.

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

Después de capturar los procesos de la aplicación de Windows, los resultados deberán investigarse para identificar si el error está relacionado con el directorio de trabajo.

  1. Revise los resultados de SysInternals Process Monitor y busque errores descritos en la tabla anterior.
  2. Si los resultados muestran un resultado de "Nombre no encontrado", con los detalles "Desired Access: ..." 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 Compatibilidad con PSF : Acceso al sistema de archivos para obtener instrucciones sobre cómo aplicar la corrección de PSF a la aplicación. Displays the error message witnessed in the SysInternals Process Monitor for failure to write to directory.

Solución

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

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

  1. Almacenar provisionalmente la aplicación Windows en un directorio local
  2. Cree config.json e inserte los archivos PSF necesarios.
  3. Actualizar el archivo AppxManifest de Windows
  4. Volver a empaquetar y firmar la aplicación Windows

Los pasos anteriores proporcionan instrucciones a través de la extracción del contenido de la aplicación Windows en un directorio preconfigurado local, la inserción de los archivos de corrección de PSF en el directorio Windows aplicación almacenada provisionalmente, la configuración del Selector de la aplicación para que apunte al iniciador de PSF y, a continuación, configure el archivo config.json de PSF 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 de y el uso de las siguientes herramientas:

  • Herramienta cliente de NuGet
  • Marco de compatibilidad de paquete
  • SDK de Windows 10 (versión más reciente)
  • Monitor de procesos de 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 cliente de NuGet y guarde el nuget.exe en la C:\PSF\nuget carpeta .

  2. Descargue el marco de compatibilidad de paquetes mediante Nuget mediante la ejecución de lo siguiente desde una ventana de PowerShell administrativa:

    Set-Location "C:\PSF"
    .\nuget\nuget.exe install Microsoft.PackageSupportFramework
    
  3. Descargue e instale el Toolkit de desarrollo de software de Windows 10 (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 instalar:
      • 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.

Almacenar provisionalmente la aplicación Windows

Al almacenar provisionalmente la aplicación Windows, extraeremos o desempaquetaremos el contenido de la aplicación Windows en un directorio local. Una vez que la aplicación Windows se ha desempaquetado en la ubicación de almacenamiento provisional, los archivos de corrección de PSF se pueden insertar para corregir cualquier experiencia no deseada.

  1. Abra una ventana de PowerShell administrativa.

  2. Establezca las siguientes variables que tienen como destino el 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 la aplicación Windows 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"
    

Crear e insertar archivos PSF necesarios

Para aplicar acciones correctivas a la aplicación de Windows, se debe crear un archivo config.json y proporcionar información sobre el Windows App Selector que produce un error. Si hay varios Windows iniciadores de aplicaciones que experimentan 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 de PSF auxiliares deben moverse a la raíz del paquete de aplicación de Windows.

  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 del 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 de almacenamiento provisional de la aplicación Windows (C:\PSF\Staging\PSFSampleApp) y establezca el nombre de archivo como config.json. 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 AppxManifest almacenado provisionalmente Windows ubicado 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 ubicado en el archivo AppxManifest.xml ubicado en Package.Applications.Application en el campo Id. de aplicaciones del archivo config.json . Image circling the location of the ID within the AppxManifest file.

  7. Copie la ruta de acceso relativa al paquete desde el campo Ejecutable ubicado en el archivo AppxManifest.xml ubicado en Package.Applications.Application en el campo Ejecutable de aplicaciones del archivo config.json . Image circling the location of the executable within the AppxManifest file.

  8. Copie la ruta de acceso primaria relativa al paquete desde el campo Ejecutable ubicado en el archivo AppxManifest.xml ubicado en Package.Applications.Application en el campo WorkingDirectory de aplicaciones del archivo config.json . Image circling the location of the working directory within the AppxManifest file.

  9. Copie el nombre ejecutable del campo Ejecutable ubicado en el archivo AppxManifest.xml ubicado en Package.Applications.Application en el campo Ejecutable procesos del archivo config.json . Image circling the location of the process executable within the AppxManifest file.

  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 en función de la arquitectura ejecutable de la aplicación en la raíz de la aplicación almacenada provisionalmente Windows Aplicación. Los siguientes archivos se encuentran en .\Microsoft.PackageSupportFramework.< Version>\bin.

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

Actualizar 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 que se incluyó en config.json. Las aplicaciones de AppxManifest ahora deben tener como destino el PSFLauncher.exe asociado a la arquitectura de aplicaciones.

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

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

  3. Actualice el archivo 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

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

  1. Abra una ventana de PowerShell administrativa.

  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 la aplicación de Windows desde la carpeta 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. Ejecute el siguiente cmdlet de PowerShell para firmar la aplicación de Windows:

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