Desinstalar un archivo MSI de la línea de comandos sin usar msiexec


msiexec es un software de símbolo del sistema que instala un programa MSI. Pero he encontrado que puede instalar un archivo MSI desde la línea de comandos simplemente escribiendo el nombre del archivo MSI en la línea de comandos.

Pero para desinstalar el archivo MSI, parece que tienes que llamar al programa msiexec y darle un /x o /uninstall.

¿Cómo puedo desinstalar un MSI de la línea de comandos sin usar la rutina msiexec?

Author: Stein Åsmul, 2009-01-16

7 answers

Respuesta corta: no puedes. Usa MSIEXEC / x

Respuesta larga: Cuando ejecuta el archivo MSI directamente en la línea de comandos, todo lo que sucede es que ejecuta MSIEXEC por usted. Esta asociación se almacena en el registro. Puede ver una lista de asociaciones (en el Explorador de Windows) yendo a Herramientas / Opciones de carpeta / Tipos de archivo.

Por ejemplo, puede ejecutar un .Archivo DOC desde la línea de comandos, y WordPad o WinWord lo abrirá por usted.

Si busca en el registro bajo HKEY_CLASSES_ROOT\.msi, ya lo verás .Los archivos MSI están asociados con el ProgID "Msi.Paquete". Si miras en HKEY_CLASSES_ROOT\Msi.Package\shell\Open\command, verás la línea de comandos que Windows realmente usa cuando "ejecutas" a .Archivo MSI.

 44
Author: Roger Lipscombe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-16 10:46:17

Hay muchas maneras de desinstalar un paquete MSI. Esto se pretende como una "referencia".

En resumen puede desinstalar a través de: msiexec.exe, ARP, WMI, PowerShell , Sistemas de implementación como SCCM, VBScript / COM Automation, DTF, o vía hidden Windows cache folder, y algunas otras opciones que se presentan a continuación.

Los primeros párrafos proporcionan importantes MSI tidbits, entonces hay 14 secciones con diferentes formas de desinstalar un archivo MSI. Puh.

Secciones 1, 2 y 3 son los normal de desinstalación enfoques (y por lo tanto se recomienda). Personalmente uso la opción 3 o 5 de la sección 3 (ambas opciones con registro, pero la opción 5 también se ejecuta en silencio). Si estás muy ocupado , omite todas las balbuceas y elige una de estas: hará el trabajo.


Si tiene problemas al desinstalar por completoy está buscando una alternativa al obsoleto MsiZap.exe y / o Utilidad de limpieza de Windows Installer ( MSICUU2.exe ), puede probar el nuevo Herramienta FixIt de Microsoft (o la página internacional). Aparentemente puede funcionar para otros problemas de instalación también.


Si cree que MSI y Windows Installer es más problemático de lo que vale, es posible que desee leer sobre los beneficios corporativos de usar archivos MSI.


Las configuraciones de Installscript MSI generalmente vienen envueltas en una configuración .archivo exe . Para obtener más información sobre los parámetros a utilizar para desinstalar tales configuraciones, consulte estos enlaces: configuración.exe pdf hoja de referencia, Configuración.exe y Actualización.Parámetros de Línea de Comandos exe.


Algunos archivos MSI se instalan como parte de paquetes a través de mecanismos tales como la Quemar (WiX Toolkit) o InstallShield Suite proyectos. Esto puede hacer que la desinstalación sea ligeramente diferente de lo que se ve a continuación. Aquí está un ejemplo para los proyectos de la suite InstallShield.


Tenga en cuenta que ejecutar uninstall silenciosamente o interactivamente puede causar resultados diferentes (!). Para una descripción bastante larga de por qué este es el caso, por favor lea este post: Desinstalar del Panel de control es diferente de Quitar de .msi


Si se le solicita inesperadamente el medio de instalación original al intentar desinstalar, lea esta respuesta: Por qué MSI requiere el original .archivo msi para proceder con una desinstalación? y tal vez también la sección 12 a continuación para algunos detalles técnicos importantes.


Si tienes CCleaner o herramientas de limpieza similares instaladas, tal vez saltar a sección 11.


Si la desinstalación falla por completo (no es posible ejecutarla), consulte las secciones 12 y 13 a continuación para ver una posible forma de "deshacer " la instalación mediante restauración del sistema y / o herramientas de limpieza.


1. Usando el MSI original

  • Si tiene acceso al MSI original utilizado para la instalación, simplemente puede hacer clic con el botón derecho en Explorador de Windows y seleccione Desinstalar.
  • También puede desinstalar a través de la línea de comandos como se explica en la sección 3.

2. Usando el Applet ARP (Agregar/Quitar programas)

  • Solo tengo que mencionar el enfoque normal, aunque es obvio {[165]]}
  • Ir inicio ejecutar appwiz.cpl INTRODUZCA para abrir el applet agregar/quitar programas (o haga clic en agregar / quitar programas en el panel de control)
  • haga Clic en "Eliminar" para el producto que desea desinstalar.

3. Usando msiexec.línea de comandos exe (directamente o a través de un archivo por lotes)

  • Puede desinstalar a través del símbolo del sistema (cmd.exe), archivo por lotes o incluso desde dentro de un ejecutable como una operación de shell .
  • Lo hace pasando el GUID del producto (compruebe a continuación cómo para encontrar este GUID ) o la ruta al archivo MSI original, si está disponible, a msiexec.exe.
  • Para todas las líneas de comando a continuación puede agregar /qn a hacer que la desinstalación se ejecute en modo silencioso. Así es como se ejecuta una desinstalación cuando se activa desde el applet agregar/quitar.

    • Opción 1: Desinstalación interactiva básica (acceso al archivo MSI original):

       msiexec.exe /x "c:\filename.msi"
      
    • Opción 2: Interactivo básico desinstalar a través del GUID del producto (sin acceso al archivo MSI original - aquí es cómo encontrar el producto GUID - el mismo enlace que a continuación):

       msiexec.exe /x {11111111-1111-1111-1111-11111111111X}
      
    • Opción 3: Desinstalación interactiva con un archivo de registro detallado:

       msiexec.exe /x "c:\filename.msi" /L*V "C:\msilog.log"
       msiexec.exe /x {11111111-1111-1111-1111-11111111111X} /L*V "C:\msilog.log"
      
    • Opción 4: Desinstalación interactiva con un archivo de registro detallado y enjuagado (verbose, flush to log opción - escribir registro continuamente, puede ser muy lento):

       msiexec.exe /x "c:\filename.msi" /L*V! "C:\msilog.log"
       msiexec.exe /x {11111111-1111-1111-1111-11111111111X} /L*V! "C:\msilog.log"
      
      • La opción flush to log hace que la desinstalación sea lenta porque el archivo de registro se escribe de forma continua en lugar de por lotes. Esto garantiza que no se pierda el búfer de registro si la configuración falla.

      • En otras palabras, habilite esta opción si su configuración se bloquea y no hay información útil en su archivo de registro detallado. Elimine el signo de exclamación para desactivar la opción de descarga para registrar y la desinstalación será mucho más rápida. Usted aún así obtener un registro detallado, pero como se ha indicado algún búfer de registro podría perderse.

    • Opción 5 (recomendado): Desinstalación silenciosa con un archivo de registro detallado-suprimir reinicios (sin descarga en el registro-consulte la opción anterior para ver lo que esto significa):

       msiexec.exe /x "c:\filename.msi" /QN /L*V "C:\msilog.log" REBOOT=R
       msiexec.exe /x {11111111-1111-1111-1111-11111111111X} /QN /L*V "C:\msilog.log" REBOOT=R
      

      Explicación rápida del parámetro (ya que recomiendo esta opción):

       /X = run uninstall sequence
       /QN = run completely silently
       /L*V "C:\msilog.log"= verbose logging at path specified
       {11111111-1111-1111-1111-11111111111X} = product guid of app to uninstall
       REBOOT=R = prevent unexpected reboot of computer
      

      De nuevo, cómo encontrar el guid del producto: ¿Cómo puedo encontrar el GUID de producto de una configuración MSI instalada? (para desinstalar si no tiene el MSI original para especificar en el comando desinstalar).

  • Consejo superior: Si crea un archivo de registro para su desinstalación, puede localizar los problemas en el registro por buscando "valor 3". Esto es particularmente útil para archivos verbosos, porque son tan, bueno, verbosos : -).

  • ¿Cómo encontrar el GUID del producto para un MSI instalado?

  • Más información sobre el registro de installsite.org: ¿Cómo puedo crear un archivo de registro de mi instalación? - gran visión general de las diferentes opciones y también detalles de Registro de InstallShield.

  • Msiexec (opciones de línea de comandos) - descripción general de la línea de comandos para msiexec.exe de MSDN. Aquí está la versión Technet.

4. Usando la base de datos MSI en caché en la carpeta de caché súper oculta

  • MSI elimina todas las cabinas (versiones anteriores de Windows) y almacena en caché cada MSI instalado en una carpeta del sistema súper oculta en %SystemRoot%\Installer (necesita mostrar archivos ocultos para verlo).
  • NB: Esta carpeta supper-hidden ahora se trata de manera diferente en Windows 7 en adelante. Los archivos MSI ahora se almacenan en caché de tamaño completo. Lea el hilo enlazado para más detalles-lectura recomendada para cualquiera que encuentre esta respuesta y juegue con la configuración peligrosa de Windows.
  • Todos los archivos MSI aquí tendrán un nombre aleatorio (formato hexadecimal) asignado, pero puede obtener información sobre cada MSI mostrando la barra de estado del Explorador de Windows (Ver - > Barra de estado) y luego seleccionando un MSI. La secuencia de resumen del MSI será visible en la parte inferior de la ventana del Explorador de Windows. O como señala Christopher Galpin, active la columna" Comentarios " en el Explorador de Windows y seleccione el archivo MSI(consulte este artículo para saber cómo hacerlo).
  • Una vez que encuentre el MSI correcto, haga clic con el botón derecho y vaya a desinstalar.
  • También puede usar PowerShell para muestra la ruta completa al paquete almacenado localmente junto con el nombre del producto. Esta es la opción más fácil en mi opinión.
  • Para iniciar PowerShell: mantenga presionada la tecla de Windows, toque R, suelte la tecla de Windows, escriba "powershell" y presione OK. Luego maximice la ventana de PowerShell y ejecute el siguiente comando:
    get-wmiobject Win32_Product | Format-Table Name, LocalPackage -AutoSize

Introduzca la descripción de la imagen aquí


5. Usando PowerShell


6. Usando la biblioteca de clases. NET DTF (parte de el kit de herramientas WiX)

    using Microsoft.Deployment.WindowsInstaller;

    public static void Uninstall( string productCode)
    {
      Installer.ConfigureProduct(productCode, 0, InstallState.Absent, "REBOOT=\"R\"");
    }

7. Usando el API de automatización de Windows Installer


8. Usando un Actualización importante de Windows Installer

  • Una actualización importante de Windows Installer puede ocurrir como parte de la instalación de otro archivo MSI.
  • Una actualización importante se crea mediante la identificación de productos relacionados en el MSI "Tabla de actualización". Estas configuraciones relacionadas se manejan como se especifica en la tabla. Generalmente eso significa que se desinstalan, pero la configuración principal también se puede abortar (generalmente se usa para detectar versiones superiores de su propia aplicación presentes en la caja).

9. Usando un sistema de despliegue avanzado / Sistema de Administración Remota

  • SCCM, CA Unicenter, Tivoli de IBM , Altiris Suite de Administración de clientes, y varios otros
  • Estas herramientas cuentan con administración avanzada de PC cliente, y esto incluye la instalación y desinstalación de archivos MSI
  • Estas herramientas parecen utilizar una combinación de msiexec.exe, automation, WMI , etc... e incluso su propia forma de invocar instalaciones y desinstalaciones.
  • En mi experiencia estas herramientas cuentan con mucha "personalidad" y necesitas adaptarte a sus diferentes formas de hacer cosa.

10. Usando WMI-Instrumentación de Administración de Windows


11. Usando una herramienta de terceros como ccleaner o similar

  • Varias aplicaciones de Windows cuentan con su propia interfaz para desinstalar no solo paquetes MSI, sino también instaladores heredados.
  • No quiero hacer ninguna recomendación específica de herramientas aquí (especialmente los comerciales), pero el conocido CCleaner cuenta con una interfaz de desinstalación (y tiene una versión gratuita). También debo añadir que esta herramienta sufrió un ataque de malware recientemente.
  • Supongo que todos debemos recordar que incluso el software inofensivo puede ser inyectado con malware en sus ubicaciones de descarga (ataque FTP).
    • yo uso virustotal.com para comprobar mis descargas, y también Sysinternals Proceso Explorer para verificar los procesos en ejecución después de la instalación, junto con el software de seguridad normal (lo que esté disponible).
    • Una sorprendente cantidad de software de "área gris" se encuentra generalmente con este enfoque (barras de herramientas, emoticonos, adware, etc...), junto con varios falsos positivos (también pueden causar problemas ya que el software de seguridad bloquea su acceso o los pone en cuarentena haciendo una gran cantidad de fuzz). Y ciertamente malware real también.
    • Algunos consejos de uso para el Proceso Explorer se puede encontrar aquí - una serie de tweets - esta herramienta de Explorador de procesos se conecta a VirusTotal.com para comprobar todos los procesos en ejecución de forma interactiva, todo lo que necesita son unos pocos pasos de configuración.
    • Debo señalar que Process Explorer produce una comprobación de firma de archivos, pero no heurística - por lo que entiendo (no hay comprobación de operaciones sospechosas, solo una comprobación con más de 60 suites de seguridad para archivos marcados). Necesita una herramienta de seguridad regular para la heurística interactiva y en línea protección.
    • Por si sirve de algo, creo que algún software de seguridad está al borde de causar más problemas de falsos positivos que el malware. Famosas últimas palabras en la era de ransom-ware...
    • Esa es una digresión lo suficientemente grande - simplemente no quiero ver a la gente descargar malware. Haga su virustotal.com compruebe al menos.
  • Desinstalar de esta manera debería funcionar bien. Creo que estas herramientas se meten con demasiadas cosas cuando intentas su " limpieza características " sin embargo. Úselo con precaución. Si solo utiliza la función de desinstalación, debería estar bien.

12. Usando una herramienta de limpieza como msizap o similar

  • Para completar msizap.exe debe mencionarse aunque está obsoleto, no soportado y desactualizado. No se debe usar en ninguna versión más reciente de Windows
  • Esta herramienta de línea de comandos ( msizap.exe) también tenía una interfaz gráfica de usuario disponible (MSICUU2.exe). Ambas herramientas están obsoletas.
  • El uso previsto de estas herramientas era limpiar las desinstalaciones fallidas:
    • Generalmente para el caso raro cuando el MSI almacenado en caché con el nombre aleatorio falta erróneamente y la desinstalación falla por esta razón mientras se solicita el MSI original
      • Este es un problema raro, pero yo mismo lo he visto. Solo algunas causas potenciales:
        • Interferencia con el sistema restaurar? La restauración de una imagen anterior del sistema elimina accidentalmente un archivo MSI almacenado en caché?
        • Aplicaciones de limpieza mal diseñadas eliminando lo que no deberían?
        • Problemas de diseño de MSI o un fallo en msiexec.exe hacia el final de la instalación durante el registro del producto final? Me parece poco probable, ya que el almacenamiento en caché se realiza antes de iniciar la instalación, pero he visto problemas como este mientras se desarrollan archivos MSI.
        • Un corte repentino de energía? También algo improbable debido a la protección incorporada en Windows Installer, pero la pérdida repentina de energía siempre puede causar resultados inesperados.
        • Antivirus u otro software de seguridad eliminar o bloquear el acceso al archivo MSI en caché?
        • Si está desarrollando un MSI y sigue reinstalando la prueba, puede desencadenar este problema reutilizando el mismo código de paquete entre compilaciones (MSI trata diferentes archivos MSI como el mismo archivo por definición si el código del paquete es el mismo-todos los tipos del resultado de problemas extraños). Este es un caso muy especial que generalmente solo se ve en equipos utilizados para desarrollo o control de calidad.
        • El usuario o administrador elimina manualmente archivos MSI de la carpeta de caché para guardar o crear espacio disponible en disco o simplemente para jugar con la configuración de Windows. La carpeta es "super oculta" y difícil de acceder, pero todavía es posible encontrarla y eliminar archivos de ella.
        • Ciertamente hay otras causas posibles, pero la lista se ha vuelto demasiado largo y voluminoso ya.
    • También para otros tipos de desinstalaciones fallidas
    • También podría usarse para zap cualquier instalación MSI, aunque obviamente no es recomendable.
    • Más información: Por qué MSI requiere el original .archivo msi para proceder con una desinstalación?
  • Esta nueva herramienta de soporte (esta herramienta ahora también está obsoleta) se puede probar en recientes Versiones de Windows si tiene paquetes MSI desaparecidos que necesitan desinstalarse.
  • Algunos han sugerido utilizar la herramienta enlazada aquí por saschabeaumont: Desinstalar sin un archivo MSI. Si lo intentas y funciona, por favor, asegúrate de hacérnoslo saber.
  • Si tiene acceso al MSI original que se usó realmente para instalar el producto, puede usarlo para ejecutar la desinstalación. Debe ser el MSI exacto que se utilizó, y no solo un una.

13. Usando restauración del sistema ("instalación deshacer" - último recurso EN mi humilde opinión)

  • Esto estrictamente hablando no es una forma de " desinstalar" sino de " deshacer" la última instalación, o varias instalaciones para el caso.
  • Restaurar a través de un punto de restauración devuelve el sistema a un estado de instalación anterior (puede encontrar demostraciones de video de esto en YouTube o un sitio similar).
  • Tenga en cuenta que la la característica se puede desactivar total o parcialmente - es posible desactivar permanentemente para toda la máquina, o adhoc por instalación.
  • He visto nuevos problemas de instalación irresolubles resultantes de una restauración del sistema, pero normalmente funciona bien. Obviamente, no uses la función por diversión. Es un último recurso y es mejor usarlo para reversión de nuevos controladores o configuraciones que se acaban de instalar y se encuentran para causar problemas inmediatos (bluescreen , reinicios, inestabilidad, etc...).
  • Cuanto más tiempo regreses, más trabajo de repetición crearás para ti mismo, y mayor será el riesgo. La mayoría de los sistemas cuentan con solo unos pocos puntos de restauración, y la mayoría de ellos se extienden solo un mes o dos, creo.
  • Tenga en cuenta que la restauración del sistema podría afectar a Las actualizaciones de Windows que luego deben volver a aplicarse, así como muchas otras configuraciones del sistema. Más allá de las molestias puras, esto también puede hacer que los problemas de seguridad reaparezcan y es posible que desee ejecute una comprobación de seguridad específica en las casillas de destino utilizando Microsoft Baseline Security Analyzer o herramientas similares.
  • Ya que he mencionado restauración del sistema supongo que debo mencionar la Última Buena Característica de Configuración Conocida. Esta característica no tiene nada que ver con la desinstalación o la restauración del sistema, pero es la última configuración de arranque que funcionó o resultó en un sistema en ejecución. Se puede utilizar para obtener su sistema funcionando de nuevo si bluescreens o se detiene durante el arranque. Esto sucede a menudo después de la instalación del controlador.

14. Funciones de Windows Installer (C++)

Para completar, supongo que deberíamos mencionar el núcleo de todo, la forma más práctica: las funciones de la API de Windows Installer de Win32. Estas son probablemente las funciones utilizadas por la mayoría, si no todos los otros enfoques enumerados anteriormente "bajo el capó". Son utilizados principalmente por aplicaciones o soluciones que tratan directamente con MSI como tecnología.

Hay una respuesta en serverfault.com que puede ser de interés como un resumen de los diferentes enfoques programáticos para desinstalar (COM Automation,. NET, Win32 installer functions).

A continuación encontrará un fragmento de C++ que muestra cómo desinstalar Orca, 10.1.17134.12 por código de producto usando una llamada a la función MsiConfigureProductEx. Para desinstalar otro producto, reemplace el GUID especificado para prodcode por el de su producto. Para encontrar el ver esta respuesta: ¿Cómo puedo encontrar el GUID del producto de una configuración MSI instalada?

La desinstalación se realizará en modo GUI completo. Para ejecutar en modo silencioso o algún otro modo GUI (reducido, básico, etc...), por favor vea la función: MsiSetInternalUI.

#include "pch.h"

#define WIN32_LEAN_AND_MEAN //Minimize includes from Windows.h
#include <windows.h>
#include <msi.h> // Windows Installer
#include <tchar.h> 

#pragma comment(lib, "msi.lib") // To make code link

int main()
{
    const TCHAR noreboot[] = _T("REBOOT=ReallySuppress");
    const TCHAR prodcode[39] = _T("{D7B80ABC-1950-37B8-F851-C3783EED9C93}"); // Orca, 10.1.17134.12

    UINT res = MsiConfigureProductEx(prodcode, INSTALLLEVEL_DEFAULT, INSTALLSTATE_ABSENT, noreboot);

    return res; // Error Codes: https://msdn.microsoft.com/en-us/library/windows/desktop/aa376931(v=vs.85).aspx
}

El fragmento se creó y probó con la última versión de Visual Studio 2017 a partir de septiembre de 2018:

  1. Crear una nueva "Aplicación de consola de Windows" desde Visual C++ => Escritorio de Windows.
  2. Copie y pegue el código anterior en su archivo CPP principal (reemplazando lo que esté allí).
  3. Eso debería ser todo para poder ejecutar el código. Tal vez establecer un punto de interrupción, construir y ejecutar.

    • Tenga cuidado con los cambios en las plantillas predeterminadas en VS2017, y los errores extraños que pueden resultar: Hay demasiados errores para que el motor IntelliSense funcione correctamente.
    • ACTUALIZACIÓN de septiembre de 2018: Las plantillas han cambiado de nuevo. Ya no veo el tema anterior.
    • El enlace MSDN en el código enumera los posibles mensajes de error devueltos por msiexec.exe.
 127
Author: Stein Åsmul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-13 21:35:40

También recuerde que una desinstalación se puede iniciar usando el comando WMIC:

wmic product get name --> Esto enumerará los nombres de todas las aplicaciones instaladas

wmic product where name='myappsname' call uninstall --> esto desinstalará la aplicación.

 30
Author: themrnutz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-01 18:03:28

La extensión de archivo msi se asigna a msiexec (de la misma manera que escribe a .txt filename en un símbolo del sistema inicia Notepad / default .txt file handler para mostrar el archivo).

Escribiendo así un nombre de archivo con un .la extensión msi realmente ejecuta msiexec con el archivo MSI como argumento y toma la acción predeterminada, instalar. Por esa razón, la desinstalación requiere que invoque msiexec con uninstall switch para desinstalarlo.

 3
Author: Tuminoid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-06 16:59:33
wmic product get name

Simplemente se atasca el cmd... sigue parpadeando _ después de un par de minutos

En HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall, si puede encontrar la carpeta con el nombre del software que está tratando de instalar (no la nombrada con ProductCode), la cadena de desinstalación apunta al propio desinstalador de la aplicación C:\Program Files\Zune\ZuneSetup.exe /x

 2
Author: sdaffa23fdsf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-10 06:57:25

Probaría la siguiente sintaxis: funciona para mí.

msiexec /x filename.msi /q 
 1
Author: Peter Mortensen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-17 18:49:30

Asumo que cuando escribes int file.msi en la línea de comandos, Windows llama automáticamente al archivo msiexec.msi para ti. Asumo esto porque cuando escribes la foto.png muestra el visor de imágenes predeterminado.

 -1
Author: smack0007,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-16 10:46:01