Página 1 de 2

[RESUELTO] instalación avanzada de *.exe

Publicado: 18 de abril de 2018 - 14:15
por empbilly
Hola wapters, :D

Estoy haciendo un setup.py personalizado para la instalación del software miktex, pero después de la instalación no puedo desinstalarlo a través de wapt.

¿El código siguiente necesita alguna configuración adicional?

Código: Seleccionar todo

# -*- coding: utf-8 -*-
from setuphelpers import *

uninstallkey = []

def install():
	print('installing miktex v.2.9')
	install_exe_if_needed("basic-miktex-2.9.6643-x64.exe",
							silentflags="--shared --unattended"
							key='MiKTeX 2.9')

Re: Instalación avanzada de *.exe

Publicado: 18 de abril de 2018 - 16:02
por htouvet
Después de instalar el paquete, ¿cuál es el resultado del comando cmd?

Código: Seleccionar todo

wapt-get list-registry miktex
Mirando a https://tex.stackexchange.com/questions... miktex-2-9Parece que la desinstalación se puede lograr con

Código: Seleccionar todo

uninstall_admin.exe
dominio.

Por lo tanto, puedes usar este comando en una función uninstall() en tu paquete.

Algo como:

Código: Seleccionar todo

def uninstall():
    run(makepath(programfilesx86,r'MiKTeX 2.9\miktex\bin\x64\internal\uninstall_admin.exe --unattended'))

Re: Instalación avanzada de *.exe

Publicado: 18 de abril de 2018 - 16:56
por empbilly
Después de instalar el paquete, ¿cuál es el resultado del comando cmd?

Código: Seleccionar todo

C:\Users\carinha>wapt-get list-registry miktex
UninstallKey                           Software
                             Version             Uninstallstring

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
---------------------------------------
MiKTeX 2.9                             MiKTeX 2.9
                             2.9                 "C:\Program Files\MiKTeX 2.9\mi
ktex/bin/x64/internal\copystart_admin.exe" "C:\Program Files\MiKTeX 2.9\miktex/b
in/x64/internal\uninstall_admin.exe"
En la desinstalación de miktex informa que esta ok, pero en el "resumen" aparece

Código: Seleccionar todo

Removed: cti_srt-miktexErrors: cti_srt-miktex
y en la máquina cliente miktex no se desinstala.

Si ejecuto manualmente el comando:

Código: Seleccionar todo

C:\Program Files\MiKTeX 2.9\miktex\bin\x64\internal\uninstall_admin.exe --unattended 
Todavía aparece la ventana de desinstalación manual y no hace nada automático.

Podría ser así

Código: Seleccionar todo

def uninstall():
    run(makepath(programfilesx86,r'"MiKTeX 2.9\mi
ktex/bin/x64/internal\copystart_admin.exe" "C:\Program Files\MiKTeX 2.9\miktex/b
in/x64/internal\uninstall_admin.exe"'))

Re: Instalación avanzada de *.exe

Publicado: 18 de abril de 2018 - 17:35
por htouvet
Debes encontrar el interruptor desatendido adecuado para agregarlo

Código: Seleccionar todo

C:\Program Files\MiKTeX 2.9\miktex\bin\x64\internal\uninstall_admin.exe
Para que se ejecute silenciosamente. Podría ser /s /SILENT --quiet -q o quizás no se haya planeado que se ejecute silenciosamente en absoluto...
El comando registrado parece estar roto debido a que hay una confusión de barras invertidas y barras diagonales.

Re: Instalación avanzada de *.exe

Publicado: 19 de abril de 2018 - 00:34
por empbilly
Según el desarrollador de miktex, solo tiene la opción de desinstalación a través de la línea de comandos con el propio instalador.

Código: Seleccionar todo

miktexsetup uninstall
Mañana intentaré eliminarlo ejecutando wmic a través de cmd.exe o rmdir en "C:\Program Files\MiKTeX 2.9".

Re: Instalación avanzada de *.exe

Publicado: 19 de abril de 2018 - 17:43
por empbilly
Probé con el código a continuación, pero me aparece el error:

Código: Seleccionar todo

Coping miktexsetupx64.exe and miktexsetup.exe to MiKTeX 2.9 folder...
NameError: global name 'programfilesx86' is not defined

Código: Seleccionar todo

# -*- coding: utf-8 -*-
from setuphelpers import *

uninstallkey = []

def install():
	print('Coping miktexsetupx64.exe and miktexsetup.exe to MiKTeX 2.9 folder...')
	filecopyto('miktexsetupx64.exe',makepath(programfilesx86,'MiKTeX 2.9'))
	filecopyto('miktexsetup.exe',makepath(programfilesx86,'MiKTeX 2.9'))
	if isfile(makepath(programfilesx86,'MiKTeX 2.9','miktexsetupx64.exe')):
		print('Files copied successfully!')
	print('Installing MiKTeX 2.9')
	install_exe_if_needed("basic-miktex-2.9.6643-x64.exe", silentflags="--shared --unattended")
	
def uninstall():
	print(u'Starting miktex uninstall...')
	if iswin64():
		print('Uninstalling x64 version')
		run(makepath(programfilesx86,r'MiKTeX 2.9\miktexsetupx64.exe uninstall'))
	else:
		print('Uninstalling x86 version')
		run(makepath(programfilesx86,r'MiKTeX 2.9\miktexsetup.exe uninstall'))
	print(u'Uninstallation of MiKTeX 2.9 completed!')
No sé si la parte "filetocopy" funciona como creo.

Copié los dos archivos miktexsetupx64.exe y miktexsetup.exe en la carpeta del paquete, como muestro en la imagen a continuación:

https://image.ibb.co/k22rU7/wapt_pkg.png (¿La etiqueta img no funciona?)

¿Es eso así?
¿Cómo solucionar esto? Si el código es incorrecto, ¡puedes contribuir! :D

Re: Instalación avanzada de *.exe

Publicado: 19 de abril de 2018 - 19:26
por htouvet
Esto se ve bien
Simplemente reemplace programfilesx86 en su código por programfiles32

Código: Seleccionar todo

# -*- coding: utf-8 -*-
from setuphelpers import *

uninstallkey = []

def install():
	print('Coping miktexsetupx64.exe and miktexsetup.exe to MiKTeX 2.9 folder...')
	filecopyto('miktexsetupx64.exe',makepath(programfiles32,'MiKTeX 2.9'))
	filecopyto('miktexsetup.exe',makepath(programfiles32,'MiKTeX 2.9'))
	if isfile(makepath(programfiles32,'MiKTeX 2.9','miktexsetupx64.exe')):
		print('Files copied successfully!')
	print('Installing MiKTeX 2.9')
	install_exe_if_needed("basic-miktex-2.9.6643-x64.exe", silentflags="--shared --unattended")

def uninstall():
	print(u'Starting miktex uninstall...')
	if iswin64():
		print('Uninstalling x64 version')
		run(makepath(programfiles32,r'MiKTeX 2.9\miktexsetupx64.exe uninstall'))
	else:
		print('Uninstalling x86 version')
		run(makepath(programfiles32,r'MiKTeX 2.9\miktexsetup.exe uninstall'))
	print(u'Uninstallation of MiKTeX 2.9 completed!')

Re: Instalación avanzada de *.exe

Publicado: 20 de abril de 2018 - 13:34
por empbilly
Cambio un poco el guión.

Código: Seleccionar todo

# -*- coding: utf-8 -*-
from setuphelpers import *

uninstallkey = []
destdir = makepath(programfiles32,'miktex_setup')

def install():
	print('Coping miktexsetupx64.exe and miktexsetup.exe to MiKTeX 2.9 folder...')
	mkdirs(destdir)
	filecopyto('miktexsetupx64.exe',makepath(destdir,'miktexsetupx64.exe'))
	filecopyto('miktexsetup.exe',makepath(destdir,'miktexsetup.exe'))
	if isfile(makepath(programfiles32,'miktex_setup','miktexsetupx64.exe')):
		print('Files copied successfully!')
	print('Initializing installation of MiKTeX 2.9.')
	install_exe_if_needed("basic-miktex-2.9.6643-x64.exe", silentflags="--shared --unattended")
	
def uninstall():
	print(u'Starting miktex uninstall...')
	if iswin64():
		print('Uninstalling x64 version')
		run(makepath(programfiles32,r'miktex_setup\miktexsetupx64.exe uninstall'))
		remove_tree(destdir)
	else:
		print('Uninstalling x86 version')
		run(makepath(programfiles32,r'miktex_setup\miktexsetup.exe uninstall'))
		remove_tree(destdir)
	print(u'Uninstallation of MiKTeX 2.9 completed!')
Cuando intento desinstalar mkitex, aparecen los siguientes errores:
Iniciando la desinstalación de miktex...
Desinstalando la versión x64
El códec 'ascii' no puede decodificar el byte 0xc3 en la posición 132: el ordinal no está en el rango (128): la cadena defectuosa es '"El comando 'C:\\\\Program Files (x86)\\\\miktex_setup\\\\miktexsetupx64.exe uninstall' devolvió un estado de salida distinto de cero 1.\nSalida: 'C:\\Program' n\xc3\xa3o \xc3\xa9 reconocido como un comando interno\r\nou externo, una operación de programa\xc3\xa1vel o un archivo en lotes.\r\n"'
Traceback (última llamada más reciente):
Archivo "c:\wapt\waptservice\waptservice.py", línea 1151, en run
self.running_task.run()
Archivo "c:\wapt\waptservice\waptservice_common.py", línea 405, en pwrapper
return func(*arg, **kwargs)
Archivo "c:\wapt\waptservice\waptservice_common.py", línea 464, en run
self._run()
Archivo "c:\wapt\waptservice\waptservice_common.py", línea 912, en _run
self.result = self.wapt.remove(self.packagename,force=self.force)
Archivo "c:\wapt\common.py", línea 4377, en remove
logger.critical(u'Error al ejecutar el script de desinstalación: %s'%e)
UnicodeDecodeError: el códec 'ascii' no puede decodificar el byte 0xc3 en la posición 132: el ordinal no está en el rango (128)
¿El error es de parte de miktex o wapt?

Re: Instalación avanzada de *.exe

Publicado: 23 de abril de 2018 - 16:03
por empbilly
¿Algún comentario sobre mi última pregunta?

Re: Instalación avanzada de *.exe

Publicado: 23 de abril de 2018 - 23:05
por htouvet
Hola Empbilly,

Hay dos problemas...
El primero es tu código
El segundo es mi código... ;)

Como hay espacios en la ruta del programa que intenta ejecutar, cmd espera que coloque la ruta entre comillas dobles.
Entonces, hay un mensaje que dice que el programa "c:\Program" no existe.

Algo como...

Código: Seleccionar todo

def uninstall():
	print(u'Starting miktex uninstall...')
	if iswin64():
		print('Uninstalling x64 version')
		run(ur'"%s" uninstall' % makepath(programfiles32,'miktex_setup','miktexsetupx64.exe'))
		remove_tree(destdir)
	else:
		print('Uninstalling x86 version')
		run(ur'"%s" uninstall' % makepath(programfiles32,'miktex_setup','miktexsetup.exe'))
		remove_tree(destdir)
	print(u'Uninstallation of MiKTeX 2.9 completed!')
Podría funcionar.

El segundo problema es que el mensaje de error no es ASCII simple, sino codificado, y mi código no se decodifica correctamente, por lo que aparece el segundo mensaje "el códec 'ascii' no puede decodificar el byte 0xc3..."