Autor
|
Tema: Desinstalación desatendida (Leído 4,871 veces)
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.891
|
Con el código que ya tienes se muestra y se activa la ventana de diálogo del instalador. Bien, a partir de ahí puedes recurrir a NirCMD para simular pulsaciones del teclado a esa ventana para automatizar el procedimiento de desinstalación: Simularías la pulsación de la tecla TAB hasta colocar el foco sobre la opción de desinstalación, la tecla ENTER para seleccionar dicha opción, la tecla TAB otra vez hast obtener el foco del botón de aceptar, y por último la tecla ENTER una vez más. Si prefieres no depender de archivos executables de terceros (nircmd.exe), puedes simular pulsaciones del teclado con en el lenguaje VBScript: Y también con JS, y con PowerShell. Todo esto que menciono son lenguajes con soporte nativo en el sistema operativo Windows. Pero eso ya requeriría un mínimo de conocimientos de programación por tu parte. Y hay otra forma mucho más óptima de automatizar esto (basándose en el uso de la API SendMessage / PostMessage de Windows), pero eso requeriría mayor conocimiento de programación y sería absolutamente necesario dejar de utilizar una herramienta tan limitada como es Batch. Con un script de PowerShell que tuviese encapsulado un código de C# o VB.NET, se podría hacer. Pero no merece la pena invertir el tiempo necesario en desarrollar esto, aunque, de hacerlo, se lograría una forma más robusta de automatización (mejor controlada, y a prueba de errores) que con la forma tradicional de simular pulsaciones del teclado. En resumen, esto que te propongo de utilizar NirCMD es lo más sencillo y no requiere conocimientos de programación, más allá de aprender el uso del comando "SendKey" de NirCMD y el nombre de las teclas que quieras simular. PD: También podrían interesarte los comandos find, activate y focus para buscar una ventana y activarla: https://nircmd.nirsoft.net/win.htmlAtentamente, Elektro.
|
|
« Última modificación: 19 Noviembre 2024, 17:44 pm por Eleкtro »
|
En línea
|
|
|
|
Danielㅤ
Desconectado
Mensajes: 1.855
🔵🔵🔵🔵🔵🔵🔵
|
Hola, solo comentarle a Elektro que se olvidó de escribir el link en WshShell.SendKeys.
Saludos
|
|
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.891
|
Hola, solo comentarle a Elektro que se olvidó de escribir el link en WshShell.SendKeys.
Lo he corregido, ¡gracias por el apunte!.
|
|
|
En línea
|
|
|
|
Mauricio De Abreu
Desconectado
Mensajes: 25
|
Buenas tardes.
Le meteré el ojo a lo que comentan
Agradecido por todos los aportes. 👍🏼
|
|
|
En línea
|
|
|
|
Mauricio De Abreu
Desconectado
Mensajes: 25
|
Hola muchachos. Aquí les dejo el código por si a alguien le sirve. No lo hubiera logrado sin la ayuda de todos, en especial las pistas muy exactas que me dio Elektro # Codigo PowerShell para abrir la ventana de desinstalacion y enviar TAB y ENTER Add-Type @" using System; using System.Text; using System.Runtime.InteropServices;
public class User32 { [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] public static extern bool EnumWindows(EnumWindowsProc lpEnumFunc, IntPtr lParam);
[DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern int GetWindowTextLength(IntPtr hWnd);
[DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);
[DllImport("user32.dll")] public static extern IntPtr PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
public delegate bool EnumWindowsProc(IntPtr hWnd, IntPtr lParam);
public const uint WM_KEYDOWN = 0x0100; public const uint WM_KEYUP = 0x0101; public const int VK_TAB = 0x09; public const int VK_RETURN = 0x0D;
public static bool EnumTheWindows(IntPtr hWnd, IntPtr lParam) { int length = GetWindowTextLength(hWnd); if (length == 0) { return true; }
StringBuilder builder = new StringBuilder(length); GetWindowText(hWnd, builder, length + 1);
Console.WriteLine("Ventana encontrada: " + builder.ToString());
if (builder.ToString() == "Mantenimiento de ComponentesHarware") { // Guardar el handle de la ventana principal Marshal.WriteIntPtr(lParam, hWnd); return false; // Detener la enumeracion de ventanas } return true; } } "@
# Funcion para desinstalar el programa function Uninstall-Program { # Ejecutar la linea de desinstalacion Write-Output "Ejecutando linea de desinstalacion..." Start-Process "rundll32.exe" -ArgumentList "dfshim.dll,ShArpMaintain ComponentesHarware.application, Culture=neutral, PublicKeyToken=b3fd472d4be1fc0f, processorArchitecture=msil"
# Pausa para verificar #Write-Output "Pausando despues de ejecutar la linea de desinstalacion. Presiona Enter para continuar..." #Pause
# Esperar a que la ventana de desinstalacion aparezca Write-Output "Esperando 5 segundos para que aparezca la ventana de desinstalacion..." Start-Sleep -Seconds 5
# Encontrar la ventana de desinstalacion $hwndPtr = [System.Runtime.InteropServices.Marshal]::AllocHGlobal([System.Runtime.InteropServices.Marshal]::SizeOf([IntPtr]::Zero)) [User32]::EnumWindows([User32+EnumWindowsProc] { param ($hWnd, $lParam) [User32]::EnumTheWindows($hWnd, $lParam) }, $hwndPtr)
$hwnd = [System.Runtime.InteropServices.Marshal]::ReadIntPtr($hwndPtr) [System.Runtime.InteropServices.Marshal]::FreeHGlobal($hwndPtr)
if ($hwnd -ne [IntPtr]::Zero) { #Write-Output "Ventana de desinstalacion encontrada: $hwnd"
# Enviar TAB dos veces para enfocar el boton "Aceptar", luego ENTER para confirmar #Write-Output "Enviando TAB dos veces y luego ENTER para confirmar la desinstalacion..."
[User32]::PostMessage($hwnd, [User32]::WM_KEYDOWN, [User32]::VK_TAB, [IntPtr]::Zero) Start-Sleep -Milliseconds 200 [User32]::PostMessage($hwnd, [User32]::WM_KEYUP, [User32]::VK_TAB, [IntPtr]::Zero)
[User32]::PostMessage($hwnd, [User32]::WM_KEYDOWN, [User32]::VK_TAB, [IntPtr]::Zero) Start-Sleep -Milliseconds 200 [User32]::PostMessage($hwnd, [User32]::WM_KEYUP, [User32]::VK_TAB, [IntPtr]::Zero)
[User32]::PostMessage($hwnd, [User32]::WM_KEYDOWN, [User32]::VK_RETURN, [IntPtr]::Zero) Start-Sleep -Milliseconds 200 [User32]::PostMessage($hwnd, [User32]::WM_KEYUP, [User32]::VK_RETURN, [IntPtr]::Zero)
# Pausa despues de intentar presionar el boton #Write-Output "Pausando despues de intentar presionar el boton. Presiona Enter para continuar..." #Pause } else { Write-Output "No se encontro la ventana de desinstalacion."
# Pausa para verificar #Write-Output "Pausando despues de no encontrar la ventana. Presiona Enter para continuar..." #Pause }
# Pausa final para ver los resultados #Write-Output "Pausando al final del script. Presiona Enter para continuar..." #Pause }
# Llamar a la funcion para desinstalar el programa Uninstall-Program Agradecido como siempre por vuestra ayuda y consejos. Hasta la próxima...
|
|
« Última modificación: 21 Noviembre 2024, 20:08 pm por Mauricio De Abreu »
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.891
|
Aquí les dejo el código por si a alguien le sirve. Me ha dejado algo descolocado ver que al final hayas decidido hacerlo de la forma más sofisticada y compleja de las que propuse, admito que no me lo esperaba ya que no es nada común que alguien solicite ayuda en torno a un Batch-script, para luego demostrar tener la voluntad y la capacidad / conocimiento necesario de hacerlo en un script de PowerShell "hibridado" con C#, ya sea con o sin la ayuda de una IA como ChatGPT. Si en el futuro tienes dudas sobre .NET (VB.Net, C#) estaré encantando de echar una mano en el subforo dedicado a ello. Gracias por compartir el código con el resto de personas. Saludos!
|
|
« Última modificación: 22 Noviembre 2024, 04:11 am por Eleкtro »
|
En línea
|
|
|
|
Mauricio De Abreu
Desconectado
Mensajes: 25
|
Estimado Elektro...
Muy agradecido por tus palabras,
La verdad es que no soy de los que se rinden por muy difícil que sea el reto. Pero sin tu descripción jamás lo hubiera hecho, aun teniendo la ayuda de la Ai.
Cabe aclarar, que aunque tengo conocimientos de programación en varios lenguajes, es más que obvio que tuve ayuda adicional, ya que desconozco el lenguaje en cuestión.
Mi ayudante fue Copilot, con varias sugerencias de mi parte.
Por otro lado, será un placer y estaré más que encantado de contar en el futuro con tu valiosa ayuda.
Hasta la pronto!!
Un abrazo desde el norte del sur
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
(SOLUCIONAD)Ayuda, importar configuración Firefox 3.6 desatendida... tiene tela.
Software
|
SuperDraco
|
1
|
3,268
|
28 Febrero 2011, 12:15 pm
por SuperDraco
|
|
|
¿Instalación Desatendida?
Software
|
Yoker66666
|
2
|
2,284
|
25 Julio 2012, 13:44 pm
por Yoker66666
|
|
|
Ayuda con instalación desatendida Debian 7
GNU/Linux
|
ccrunch
|
0
|
2,019
|
27 Febrero 2014, 20:11 pm
por ccrunch
|
|
|
[APORTE] Archivo de instalación desatendida para Windows 10
Windows
|
Eleкtro
|
1
|
9,176
|
20 Diciembre 2015, 01:38 am
por karso
|
|
|
Desinstalación Bose Work Configuration Desinstalación Desatendida
Scripting
|
HectorScript
|
0
|
2,903
|
25 Marzo 2022, 21:27 pm
por HectorScript
|
|