Problemas con el appcert.exe en Windows 8


Aviso: en esta entrada explico cómo borrar mediante comandos de PowerShell las aplicaciones Metro que tengáis instaladas. Usar sólo en caso de extrema necesidad.

Cuando estamos desarrollando aplicaciones Metro nos va a pasar alguna vez que el despliegue se quede a medias o que ni siquiera esté el despliegue hecho pero la aplicación figure como registrada. Normalmente eso no nos supondrá ningún problema, pues muchas veces esas aplicaciones ni siquiera aparecerán en la pantalla de inicio.
El problema vendrá más adelante, cuando queramos utilizar el kit de certificación de la tienda (Wack: appcertui.exe/appcert.exe) para probar que nuestra aplicación funciona correctamente antes de enviarla a validar, para así ahorrarnos unos cuantos días de espera.
Cuando Wack nos dice que no ha podido probar nuestra aplicación porque no estaba instalada en realidad no es culpa de nuestro despliegue, sino de alguna aplicación que se quedó en algún estado indeterminado de la materia dentro del registro de aplicaciones Metro.

¿Y por qué ocurre esto?

Si listamos las aplicaciones que tenemos instaladas con el comando de PowerShell Get-AppxPackage, obtendremos un listado en el que aparecerán aplicaciones como esta:

Name            : 7b10c66c-6210-460f-a1e0-7cf7545030d6
Publisher       : CN=xxxxx
Architecture    : Neutral
ResourceId      :
Version         : 1.0.0.0
PackageFullName : 7b10c66c-6210-460f-a1e0-7cf7545030d6_1.0.0.0_neutral...
InstallLocation : C:\Users\xxxxx\AppData\Local\Temporary Projects\Application1\bin\Debug\AppX
IsFramework     : False

Si os fijáis bien en la InstallLocation, en mi caso es una carpeta temporal que seguramente se acabará borrando en algún momento, en otros casos (según cómo esté configurado el visual studio) no se borrará, pero puede que la borremos nosotros porque movamos el proyecto, o era simplemente un proyecto de prueba. Así que en algún momento obtendremos esto:

Name            : 7b10c66c-6210-460f-a1e0-7cf7545030d6
Publisher       : CN=xxxxx
Architecture    : Neutral
ResourceId      :
Version         : 1.0.0.0
PackageFullName : 7b10c66c-6210-460f-a1e0-7cf7545030d6_1.0.0.0_neutral...
InstallLocation :
IsFramework     : False

Y debido a un bug del Wack, éste no encontrará ninguna aplicación que esté después de una app sin InstallLocation. Gracias a powershell podemos listar todas las apps que se hayan quedado en ese estado:

Get-AppxPackage | Where-Object {$_.InstallLocation -eq $null }

¿Cómo solucionarlo?

Modificando un poco el script podemos borrar todas esas aplicaciones zombi de un golpe:

Get-AppxPackage | Where-Object {$_.InstallLocation -eq $null } | Foreach {Remove-AppxPackage $_.PackageFullName}

¿Qué hago si todavía falla?

Puede que en algunos casos ni así consigamos que nos funcione el Wack, por culpa de alguna otra app instalada, como es muy probable que sea por una de las que hemos compilado nosotros, lo que podemos hacer es borrar todas las apps que tengamos dentro de la carpeta de usuarios:

Get-AppxPackage | Where-Object {$_.InstallLocation -like $home } | Foreach {Remove-AppxPackage $_.PackageFullName}

Mucho cuidado con este comando, borrará todas las aplicaciones que estén instaladas desde la carpeta C:\Users\[nombre de usuario]

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s