
Inicialmente implementé Python 3.8.1 en nuestra organización (a través de WSUS Package Publisher, si corresponde) usando los MSI encontrados.aquí.Instalé estos MSI usando WSUS Package Publisher con el siguiente comando para cada MSI:
msiexec.exe /i core.msi /qn /norestart ALLUSERS=1
Desafortunadamente, por alguna razón, esto me estaba causando una serie de problemas que parecían apuntar a que se ignoraba ALLUSERS=1, posiblemente debido a la falta de elevación del instalador (no aparece en la lista de Aplicaciones instaladas, no aparece a través del py). 0 lista). Es frustrante que todos estos se implementaran accidentalmente para todos antes de que nos diéramos cuenta de estos problemas.
Para limpiar, ahora necesito desinstalar estos MSI. Hacer clic con el botón derecho en estos MSI en la máquina afectada y hacer clic en "Desinstalar" funciona. Aparece el mensaje "¿Está seguro de que desea desinstalar?" mensaje, seguido de la solicitud de elevación, y luego se desinstala como se esperaba.
Sin embargo, estoy tratando de hacer esto en silencio para poder implementarlo. Este es el comando que intento ejecutar a través de un shell elevado:
msiexec.exe /x .\core.msi /qn
No pasa nada. Puedo ver en el Administrador de tareas que msiexec.exe se está ejecutando sin actividad, por lo que tengo la sensación de que está llegando al punto "¿Estás seguro?" mensaje y quedarse atascado en ese mensaje.
¿Cómo evito este mensaje durante la desinstalación silenciosa?
Respuesta1
Entonces, después de un tiempo en el que mi colega y yo solucionamos este problema, comprendimos mejor la situación y lo que realmente sucedió. Esto no resuelve lo que intentábamos hacer originalmente (implementar MSI de Python 3.8.1 a través de WSUS), pero al menos nos ayuda a limpiar. ¡Esperamos que esto ayude a otro administrador que haya experimentado algo similar a esto con WSUS Package Publisher o algo más!
Estamos implementando Python a través de WSUS, lo que significa que todas las máquinas locales instalan Python como NTAUTH\SYSTEM. Esto explica por qué Python se estaba instalando correctamente, sin quejas, en la ubicación que especifiqué en .MST (C:\Program Files\Python38).
Por alguna razón, todos los MSI de Python ignoran la llamada ALLUSERS=1 en el .MST y la especifican como parámetro. No tengo idea de por qué (¿tal vez alguien del equipo de Python o alguien con un conocimiento más profundo podría intervenir? :)).
El resultado de esto significa, según tengo entendido/probado, que el instalador detecta que no se está ejecutando como un proceso elevado y, por lo tanto, instala el MSI como usuario NTAUTH\SYSTEM, para NTAUTH\SYSTEM, colocando las claves para el iniciador de Python, etc. en HKCU. en lugar de HKLM. Pero debido al .MST y los derechos de acceso que tiene NTAUTH\SYSTEM, coloca los archivos de instalación en C:\Program Files\Python38 según lo solicitado.
Esto explica por qué las instalaciones fallaban, la desinstalación era imposible sin importar qué y por qué nuestro Python Launcher se comportaba de manera extraña a pesar de que PATH estaba configurado correctamente.
- Las instalaciones fallarían porque todas las claves aún estarían ubicadas en HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\
- Los instaladores nunca aparecieron en Aplicaciones instaladas a pesar de la instalación exitosa, porque se instalaron para NTAUTH\SYSTEM y no para todos los usuarios.
- La desinstalación a través de MSIEXEC o haciendo clic derecho en MSI indicaría que no estaba instalado, porque Python técnicamente no estaba instalado ni para el sistema (también conocido como Todos los usuarios cuando está elevado), ni para el usuario que intenta desinstalarlo (también conocido como mi cuenta de usuario, sin elevación).
- py -0 no estaba seleccionando la instalación de Py38 a pesar de haber seleccionado otras versiones, porque el iniciador estaba buscando en las claves HKLM, en las que 381 no se estaba instalando.
Entonces, para limpiar este enorme desastre, necesitábamos desinstalar todos los MSI de Python 3.8.1 como NTAUTH\SYSTEM y sin elevación. Hay varias formas de hacer esto: ya sea descargando y usando PSEXEC para iniciar un CMD o Powershell como sistema (psexec64.exe -sid powershell.exe) y ejecutando MSIEXEC a través de eso, o (el enfoque que tomamos) crear una tarea programada en la máquina, haga que se ejecute como NTAUTH\SYSTEM, sin los privilegios más altos, y desinstale todo lo que tenga la propiedad "Python 3.8.1*". Un script rápido de Powershell para esto:
$products = Get-WmiObject Win32_Product
foreach ($pkg in (
"Python 3.8.1 Tcl*",
"Python 3.8.1 Util*",
"Python 3.8.1 Test*",
"Python 3.8.1 Dev*",
"Python 3.8.1 Documentation*",
"Python 3.8.1 pip*",
"Python 3.8.1 Standard*",
"Python 3.8.1 Exe*",
"Python 3.8.1 Core*",
"Python 3.8.1 Add*",
"Python Launcher*"
)) {
$products | Where-Object {
($_.Name -like $pkg)
} | Select-Object -ExpandProperty LocalPackage | Foreach-Object {
Start-Process -FilePath "msiexec.exe" -ArgumentList "/x $_ /QN" -Wait
}
}
get-wmiobject Win32_Product | where-object {$_.Name -like "Python*"} | Format-Table Name, LocalPackage