Iniciar Windows aplicación con parámetros

Investigación

Algunos Windows iniciadores de aplicaciones en el menú Inicio requieren que se pasen parámetros al ejecutable al iniciar la aplicación 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 soporte técnico de paquetes.

Identificación del requisito de parámetro de Selector app Windows

  1. Instale la aplicación de Windows en una máquina de prueba.

  2. Abra el menú Inicio de Windows.

  3. Busque y seleccione la Windows App Selector en el menú Inicio.

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

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

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

  7. Abra el menú Inicio de Windows.

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

  9. Seleccione MásAbrir>> ubicación de archivo en el menú desplegable.

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

  11. Seleccione Propiedades en el menú desplegable.

  12. Revise 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 hay un parámetro enumerado, esta aplicación Example of the File Property Window with Parameter in Target

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

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 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 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. Creación de config.json e inserción de archivos PSF necesarios
  3. Actualizar el archivo appxManifest de Windows
  4. Volver a empaquetar y firmar la aplicación de Windows

Los pasos anteriores proporcionan instrucciones para extraer el contenido de la aplicación de Windows en un directorio almacenado provisionalmente local, insertar los archivos de corrección de PSF en el directorio de aplicación de Windows almacenado provisionalmente, configurar application Selector para que apunte al iniciador de PSF y, a continuación, configurar el archivo CONFIG.json de PSF para redirigir el iniciador 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:

  • 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 soporte técnico 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 de Windows

Al almacenar provisionalmente la aplicación de Windows, extraeremos o desempaquetaremos el contenido de la aplicación de 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 administrativo.

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

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 la 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 de la VS Code, seleccionando 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 de 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": "",
                "arguments": ""
            }
        ]
    }
    
  5. Abra el archivo appxManifest Windows almacenado provisionalmente en la carpeta de almacenamiento provisional de Windows aplicación (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. Establezca el applications.id valor en config.json para que sea 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. Establezca el applications.executable valor en config.json para establecer como destino la ruta de acceso relativa a la aplicación ubicada en el campo Applications.Application.Executable del archivo AppxManifest.xml . Image circling the location of the executable within the AppxManifest file.

  8. Establezca el applications.arguments valor en config.json para que coincida con el argumento usado para iniciar la aplicación. Consulte el valor registrado en el paso final de la guía Investigación: identificación de Windows app Selector parámetro.

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

  10. Guarde el archivo config.json actualizado.

    {
        "applications": [
            {
            "id": "PSFSample",
            "executable": "VFS/ProgramFilesX64/PS Sample App/PSFSample.exe",
            "arguments": "/bootfromsettingshortcut"
            }
        ]
    }
    
  11. Copie los cuatro archivos siguientes del marco de soporte técnico 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, el AppxManifest.xml de 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 las 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$((gcim 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