| |
Mostrar Mensajes
|
|
Páginas: [1] 2 3
|
|
1
|
Programación / Scripting / Re: Desinstalación desatendida
|
en: 23 Noviembre 2024, 22:36 pm
|
|
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
|
|
|
|
|
2
|
Programación / Scripting / Re: Desinstalación desatendida
|
en: 21 Noviembre 2024, 16:50 pm
|
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...
|
|
|
|
|
4
|
Programación / Scripting / Re: Desinstalación desatendida
|
en: 12 Noviembre 2024, 17:07 pm
|
Gracias por las respuestas, sugerencias y comentarios. Hotkey no lo conozco, haré lo posible por revisarlo e implementarlo en el futuro. Con respecto al Cliconce busque y trate de darle sentido a tu propuesta pero ni idea a qué te referías. El problema lo resolví de la siguiente forma. :DeleteProgram start /min cmd /c "timeout /t 3 & powershell -command "$wshell = New-Object -ComObject wscript.shell; $wshell.AppActivate('Mantenimiento de ComponentesHarware'); Start-Sleep -Milliseconds 500; $wshell.SendKeys('{TAB}'); Start-Sleep -Milliseconds 500; $wshell.SendKeys('{TAB}'); Start-Sleep -Milliseconds 500; $wshell.SendKeys('{ENTER}')"" rundll32.exe dfshim.dll,ShArpMaintain ComponentesHarware.application, Culture=neutral, PublicKeyToken=b3fd472d4be1fc0f, processorArchitecture=msil pause goto menu La razón del porque uso dos tab es por Las opciones que aparecen en la imagen.  Con respecto a tocar el registro. Según entiendo, porque de saber no se nada. No estoy tocando directamente el registro. Estoy usando la instrucción para desinstalar el dichoso programita. Instrucción que se encuentra en el registro como para cualquier programa según entiendo. Y hacerlo manual en más de 15 mil maquinas es una locura. Agradecido como siempre por vuestra ayuda
|
|
|
|
|
5
|
Programación / Scripting / Re: Desinstalación desatendida
|
en: 11 Noviembre 2024, 19:38 pm
|
|
Buenas muchachos.
Como comenté al inicio: es la única forma que encuentro para desinstalarlo.
Lo que no comenté es que en el pasado he tratado de hacerlo con el comando Wmic. Pero no encuentra el programa por el nombre que muestra, y listando los programas este tampoco aparece.
Así que la única opción que me quedo fue la del registro.
Los comandos /S /q o sus variantes no funcionan. Eso lo probé antes de postear.
Por tal motivo hice la consulta.
Si consideran que no hay más opciones me tocará dejarlo así y hacerlo manualmente.
Agradecido de todos modos
|
|
|
|
|
6
|
Programación / Scripting / Re: Desinstalación desatendida
|
en: 11 Noviembre 2024, 16:38 pm
|
Gracias por responder. El error me da al usar el parámetro /S. Al usarlo sin el parámetro me muestra la venta de desinstalacion en donde debo dar aceptar y lo desinstalo sin problemas. Ya lo he probado en unos 50 equipos diferentes. Pero la idea es no tener que darle a aceptar para desinstalar. Por eso la consulta 
|
|
|
|
|
7
|
Programación / Scripting / Re: Desinstalación desatendida
|
en: 11 Noviembre 2024, 09:29 am
|
|
Buenos días amigos.
Nadie tiene idea de que parámetros agregar para que no pida la confirmación ?
He usado /S pero pero me da error, diciendo que no desinstalo el programa.
Alguna idea ?
Agradecido de antemano por vuestra ayuda.
|
|
|
|
|
8
|
Programación / Scripting / Desinstalación desatendida
|
en: 7 Noviembre 2024, 19:33 pm
|
|
Buenas tardes amigos.
Tengo una duda con respecto a la desinstalación de un programa desde un archivo Batch
La única forma en que puedo ejecutar la desinstalación del mismo mediante la consola de comandos, es mediante esta linea que extraje del UninstallString del editor de registro.
rundll32.exe dfshim.dll,ShArpMaintain ComponentesHarware.application, Culture=neutral, PublicKeyToken=b3fd472d4be1fc0f, processorArchitecture=msil
Pero no encuentro una manera de hacer que la desinstalación sea sin intervención del usuario, ya que al ejecutar la linea muestra la ventana de desinstalación pero pide la confirmación (aceptar).
Hay alguna forma de que sea desatendida y/ o silenciosa ?
De antemano muchísimas gracias por el apoyo.
|
|
|
|
|
10
|
Programación / Scripting / Obtener Serial de unidad optica
|
en: 17 Febrero 2022, 16:38 pm
|
Buenas amigos. Tengo problemas para obtener el serial de la unidad óptica de la laptop. He probado con los siguientes sin resultado: wmic cdrom get serialnumber wmic cdrom D: get serialnumber wmic cdrom where drive='D:' get serialnumber wmic cdrom where mediatype!='unknown' get SerialNumber wmic /output:stdout cdrom where mediatype!='unknown' get SerialNumber
Dato curioso, usando estos tampoco obtengo el serial en la lista. wmic /output:stdout cdrom get /all /format:list wmic cdrom where mediatype!='unknown' get /all /format:list Alguna idea de como obtenerlo ¿? Agradecido de antemano por la ayuda que me puedan brindar.
|
|
|
|
|
|
| |
|