Inicio de aplicaciones de Windows con parámetros

Investigación

Algunos iniciadores de aplicaciones de Windows en el menú Inicio requieren el uso de parámetros que se pasarán al ejecutable al iniciar la aplicación de Windows. Para ello, primero es necesario identificar el iniciador que requiere el parámetro antes de integrar la aplicación de Windows con el marco de compatibilidad de paquetes.

Identificación de requisito de parámetros del iniciador de aplicaciones de Windows

  1. Instala la aplicación de Windows en una máquina de pruebas.

  2. Abre el menú Inicio de Windows.

  3. Busca y selecciona el iniciador de aplicaciones de Windows en el menú Inicio.

  4. Si se inicia la aplicación, entonces no tienes ningún problema (prueba todos los iniciadores de aplicaciones de Windows asociados en el menú Inicio).

  5. Desinstala la aplicación de Windows de la máquina de prueba.

  6. Con los medios de instalación de Win32, instala la aplicación en la máquina de prueba.

  7. Abre el menú Inicio de Windows.

  8. Busca y haz clic con el botón derecho en la aplicación de Windows desde el menú Inicio.

  9. Selecciona Más>>Abrir ubicación de archivo en el menú desplegable.

  10. Haz clic con el botón derecho en el primer acceso directo de aplicación asociado (repite los tres pasos siguientes para todos los accesos directos de aplicación asociados).

  11. Selecciona Propiedades en el menú desplegable.

  12. Revisa el valor en el cuadro de texto situado a la derecha de Destino. Después de la ruta de acceso del archivo de aplicación, si aparece un parámetro, esta aplicación Example of the File Property Window with Parameter in Target

  13. Registra el valor del parámetro para su uso futuro.

Solución

Las aplicaciones de Windows redirigirán directorios específicos relacionados con la aplicación a la carpeta C:\Program Files\WindowsApps. Si una aplicación intenta escribir en el contenedor de aplicaciones de Windows, se desencadenará un error y se producirá un error en la escritura.

Para resolver el problema relacionado con la aplicación de Windows que no puede escribir en el contenedor de aplicaciones de Windows, debemos seguir los cuatro pasos siguientes:

  1. Almacenar provisionalmente la aplicación de Windows en un directorio local
  2. Crear el archivo config.json e insertar los archivos PSF necesarios
  3. Actualizar el archivo AppxManifest de la aplicación de Windows
  4. Vuelve a empaquetar y firma la aplicación de Windows

Los pasos anteriores proporcionan instrucciones acerca de la extracción del contenido de la aplicación de Windows en un directorio preconfigurado local, la inserción de los archivos de corrección de PSF en el directorio de aplicaciones de Windows preconfigurado, la configuración del iniciador de la aplicación para que apunte al iniciador de PSF y, a continuación, configurar el archivo config.json de PSF para redirigir el iniciador de PSF a la aplicación que especifica el directorio de trabajo.

Descarga e instalación de las herramientas necesarias

Este proceso le guiará durante el proceso de recuperación y uso de las siguientes herramientas:

  • Herramienta de Cliente de NuGet
  • Marco de compatibilidad de paquete
  • SDK de Windows 10 (versión más reciente)
  • Process Monitor de SysInternals

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

  1. Descarga la versión más reciente (no preliminar) de la herramienta de cliente de NuGet y guarda nuget.exe en la carpeta C:\PSF\nuget.

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

    Set-Location "C:\PSF"
    .\nuget\nuget.exe install Microsoft.PackageSupportFramework
    
  3. Descarga e instale el Kit de herramientas de desarrollo de software de Windows 10 (SDK de Win 10).

    1. Descarga el SDK de Win 10.
    2. Ejecuta el winsdksetup.exe que te descargaste en el paso anterior.
    3. Haga clic en el botón Siguiente.
    4. Selecciona 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 Windows para aplicaciones para UWP
    5. Seleccione el botón Instalar.
    6. Seleccione el botón Aceptar.

Almacenamiento provisional de la aplicación de Windows

Al almacenar provisionalmente la aplicación de Windows, se extraerá / desempaquetará el contenido de la aplicación de Windows en un directorio local. Una vez que la aplicación de Windows se ha desempaquetado en la ubicación de almacenamiento provisional, puedes insertar archivos de corrección de PSF para corregir cualquier experiencia no deseada.

  1. Abre una ventana administrativa de PowerShell.

  2. Establece las siguientes variables que tienen como destino el archivo de aplicación específico y la versión del SDK de Windows 10:

    $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$((gcim Win32_Processor).AddressWidth)"    ## Operating System Architecture
    $Win10SDKVersion  = "10.0.19041.0"                               ## Latest version of the Win10 SDK
    
  3. Desempaqueta la aplicación de 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"
    

Creación e inserción de los 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 iniciador de aplicaciones de Windows que produce un error. Si hay varios iniciadores de aplicaciones de Windows 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 compatibles deben moverse a la raíz del paquete de la aplicación de Windows.

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

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

  3. Guarda el archivo como config.json; para ello, selecciona el menú Archivo en la parte superior de la ventana de VS Code y selecciona Guardar en el menú desplegable. En la ventana Guardar como, ve al directorio de almacenamiento provisional de la aplicación de Windows (C:\PSF\Staging\PSFSampleApp) y establece el Nombre de archivo como config.json. Seleccione el botón Guardar.

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

    {
        "applications": [
            {
                "id": "",
                "executable": "",
                "arguments": ""
            }
        ]
    }
    
  5. Abre el archivo AppxManifest de la aplicación de Windows almacenado provisionalmente en la carpeta de almacenamiento provisional de la aplicación de Windows (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. Establece el valor applications.id en el archivo config.json como el mismo valor que se encuentra en el campo Applications.Application.ID del archivo AppxManifest.xml. Image circling the location of the ID within the AppxManifest file.

  7. Establece el valor en applications.executable en el archivo config.json para establecer como destino la ruta de acceso relativa a la aplicación ubicada en el campo Applications.Application.Ejecutable del archivo AppxManifest.xml. Image circling the location of the executable within the AppxManifest file.

  8. Establece el valor applications.arguments en el archivo config.json para que coincida con el argumento usado para iniciar la aplicación. Consulta el valor registrado en el paso final de la guía Investigación: identificación de requisitos del iniciador de aplicaciones de Windows.

  9. Establece el valor applications.workingdirectory en el archivo config.json para establecer como destino la ruta de acceso relativa a la carpeta que se encuentra en el campo Applications.Application.Ejecutable del archivo AppxManifest.xml. Image circling the location of the working directory within the AppxManifest file.

  10. Guarda el archivo config.json actualizado.

    {
        "applications": [
            {
            "id": "PSFSample",
            "executable": "VFS/ProgramFilesX64/PS Sample App/PSFSample.exe",
            "arguments": "/bootfromsettingshortcut"
            }
        ]
    }
    
  11. Copia los cuatro 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 de Windows almacenada provisionalmente. 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

Actualización de AppxManifest

Después de crear y actualizar el archivo config.json, el archivo AppxManifest.xml de la aplicación de Windows debe actualizarse para cada iniciador de aplicaciones de Windows que se incluyó en el archivo config.json. Las aplicaciones de AppxManifest ahora deben tener como destino el PSFLauncher.exe asociado a la arquitectura de aplicaciones.

  1. Abre el Explorador de archivos y ve a la carpeta de la Aplicación MSIX de almacenamiento provisional (C:\PSF\Staging\PSFSampleApp).

  2. Haz clic con el botón derecho en AppxManifest.xml y selecciona Abrir con Code en el menú desplegable (Opcionalmente, puedes abrirlo con otro editor de texto).

  3. Actualiza 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

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

  1. Abre una Ventana administrativa de PowerShell.

  2. Configure 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$((gcim Win32_Processor).AddressWidth)"    ## Operating System Architecture
    $Win10SDKVersion  = "10.0.19041.0"                               ## Latest version of the Win10 SDK
    
  3. Vuelve 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. Ejecuta 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