[RESUELTO] Paquete con requisito de ruta absoluta.

Preguntas sobre paquetes WAPT / Solicitudes y ayuda sobre paquetes WAPT.
Reglas del foro
Reglas del foro de la comunidad
* Soporte en inglés en www.reddit.com/r/wapt
* El soporte de la comunidad en francés está disponible en este foro
* Por favor, anteponga [RESUELTO] al título del tema si está resuelto.
* Por favor, no edite un tema que esté etiquetado como [RESUELTO]. Abra un nuevo tema haciendo referencia al anterior.
* Especifique la versión de WAPT instalada, la versión completa y el número de compilación (2.2.1.11957 / 2.2.2.12337 / etc.), así como la edición Enterprise/Discovery.
* Las versiones 1.8.2 y anteriores ya no son compatibles. Las únicas preguntas aceptadas sobre la versión 1.8.2 están relacionadas con la actualización a una versión compatible (2.1, 2.2, etc.).
* Especifique el sistema operativo del servidor (Linux/Windows) y la versión (Debian Buster/Bullseye - CentOS 7 - Windows Server 2012/2016/2019).
* Especifique el sistema operativo de la máquina de administración/creación de paquetes y de la máquina con el agente problemático, si corresponde (Windows 7/10/11/Debian 11/etc.).
* Evite hacer varias preguntas al abrir un tema, ya que podría ser ignorado. Si hay varios temas, ábralos por separado, preferiblemente uno tras otro y no todos a la vez (es decir, no sature el foro con spam).
* Incluya fragmentos de código, capturas de pantalla y otras imágenes directamente en la publicación. Los enlaces a Pastebin, Bitly y otros sitios de terceros serán eliminados sistemáticamente.
* Como en cualquier foro comunitario, el soporte es proporcionado voluntariamente por los miembros. Si necesita soporte comercial, puede comunicarse con el departamento de ventas de Tranquil IT al 02.40.97.57.55.
Bloqueado
Sistema de gestión del aprendizaje (LMS)
Mensajes: 5
Inscripción: 3 de junio de 2020 - 11:22

9 de junio de 2020 - 17:22

Hola,

estoy dando seguimiento a mi primer mensaje: viewtopic.php?f=9&t=2389 , sobre la creación de una impresora.

El script sugerido por sfonteneau funciona. Sin embargo, no hay configuración y mi controlador, por defecto, elige un formato increíble (8.5 x 11").

Así que quería configurarlo, pero estos ajustes no están fácilmente disponibles (o simplemente no soy bueno buscando). Logré encontrar una solución exportando y luego importando una configuración usando el comando:
- RUNDLL32.EXE PRINTUI.DLL,PrintUIEntry /Ss /n "Schumann copier 5th floor" /a C:\A4-format.dat
- RUNDLL32.EXE PRINTUI.DLL,PrintUIEntry /Sr /n "Schumann copier 5th floor" /a C:\A4-format.dat
Edición: Nota: Por supuesto, solo realizo la exportación una vez, en una máquina que ya está configurada, para obtener la configuración básica. Luego intento reproducir la importación con /Sr usando un paquete.wapt.


Sin embargo, el comando solo funciona durante la importación cuando tenemos una ruta absoluta. La prueba a continuación me lleva a esto Conclusión:
Cuando estoy en mi símbolo del sistema en c:> y escribo la opción /a 'A4-format.dat', la operación falla y se detiene, pero con /a 'C:/A4-format.dat' funciona, y al comprobar las propiedades de la impresora, el formato efectivamente ha cambiado. El resultado es el mismo tanto si la ventana del símbolo del sistema se inicia como administrador como si no.

Mi pregunta es:
- ¿He entendido mal algo en la ejecución de printui.exe? ¿Tienen alguna documentación sobre cómo asignar directamente la configuración de la impresora, en lugar de depender de un archivo de configuración?
- Si entiendo correctamente, ¿qué solución debería recomendar? -
¿Hay una carpeta en el equipo cliente, para cada paquete wapt, a la que se podría apuntar con una ruta absoluta que, por lo tanto, no cambiaría para cada estación de trabajo?
- ¿Deberíamos usar un recurso compartido de red para almacenar los archivos fuente?
- ¿Otra solución? (Usar un comando para copiar el archivo fuente .dat a las estaciones de trabajo cliente, por ejemplo a c:/source_wapt/fichier.dat, luego establecer la nueva ruta absoluta, evitando así una configuración general, pero utilizando un script general.)
Avatar de usuario
dcardón
Experto en WAPT
Mensajes: 1908
Inscripción: 18 de junio de 2014 - 09:58
Ubicación: Saint Sébastien sur Loire
Contacto :

9 de junio de 2020 - 21:44

El paquete se descomprime en un directorio temporal con un nombre aleatorio. Puede recuperar la ruta del directorio donde se descomprimió usando la variable `basedir`.
Denis Cardon - Tranquil IT
¡Comparte tus experiencias en WAPT! Envíanos las URL de tus blogs y artículos en la "Tu opinión del foro y los publicaremos en el de WAPT
Sistema de gestión del aprendizaje (LMS)
Mensajes: 5
Inscripción: 3 de junio de 2020 - 11:22

11 de junio de 2020 - 11:06

Gracias, la variable basedir es genial.

Sin embargo, en última instancia, ese no parece ser el problema principal.

En mi script, que en gran parte tomé prestado de sfonteneau para la creación de la impresora, aquí están las dos líneas activas:

- Instalé la impresora "Schumann Copier 5th floor". Funciona sin problemas.
run(ur'rundll32 printui.dll,PrintUIEntry /if /b "%s" /f %s /r "IP_%s" /m "%s" ' % (nombreimpresora,ruta_controlador,puertoimprimir,nombre_controladores))

Se supone que importa la configuración de impresora "printer-format.dat" a la fotocopiadora/impresora Schumann. No funciona desde PyScripter.
run(u'printui.exe /Sr /n "Copiadora Schumann 5.º piso" /a /f %s\printer-format.dat' %(basedir))
Así que probé con /f, que no cambió nada, y agregué la ruta completa con basedir. Nada cambió.

Sin embargo, como recordatorio, no hay ningún problema al usar CMD directamente, con los mismos archivos y las mismas rutas. O mejor dicho, no del todo:
Cuando compilo el paquete y lo subo a mi repositorio local, intento modificarlo y ejecuto un comando en el archivo printer-format.dat, aparece el mensaje "no se pudo completar la operación" (para la importación). Así que exporto para sobrescribir el archivo, lo importo de nuevo y funciona.

Tengo la sensación de que esto podría estar relacionado con un problema de seguridad de Windows. He encontrado muchos errores similares al crear mis paquetes. A veces encuentro soluciones alternativas que parecen más trucos (usando archivos por lotes o PowerShell) que soluciones legítimas.

En resumen, estoy dando vueltas y no entiendo los códigos de error que me devuelven. ¿Tienes algún consejo para mejorar mi comprensión?
Para su información, aquí está mi función de instalación:

Código: Seleccionar todo

def install():

    if iswin64():
        path_driver = r"IT5DSETWin_10110FR\Drivers\PCL6\Win_x64\KOAXTJ__.INF"
        name_drivers = "KONICA MINOLTA C287SeriesPCL"
    else:
        path_driver = r"IT5DSETWin_10110FR\Drivers\PCL6\Win_x86\KOAXTJ__.inf"
        name_drivers = "KONICA MINOLTA C287SeriesPCL"



    # Delete old printer
    run_notfatal('rundll32 printui.dll,PrintUIEntry /n "%s" /dl /q ' % nameprinter)

    # Create port lpr or raw
    createprinterport_raw(portprint)

    # use create lpr if needed
    #createprinterport_lpr(portprint,'qu')

    # Install printer and drivers
    run(ur'rundll32 printui.dll,PrintUIEntry /if /b "%s" /f %s /r  "IP_%s" /m "%s" ' % (nameprinter,path_driver,portprint,name_drivers))

    run(u'printui.exe /Sr /n "Copieur schumann 5eme etage" /a /f %s\printer-format.dat' %(basedir))
Aquí está el código de error cuando ejecuto un comando "instalar" en PyScripter:

Código: Seleccionar todo

2020-06-11 10:51:51,466 CRITICAL Fatal error in install script: CalledProcessErrorOutput: Command 'printui.exe /Sr /n "Copieur schumann 5eme etage" /a /f c:\\waptdev\\wapt_av-5thFloor-printer-wapt\\printer-format.dat' returned non-zero exit status 1.
Output::
Traceback (most recent call last):
  File "C:\Program Files (x86)\wapt\common.py", line 3800, in install_wapt
    exitstatus = setup.install()
  File "c:\waptdev\wapt_av-5thFloor-printer-wapt\setup.py", line 36, in install
    run(u'printui.exe /Sr /n "Copieur schumann 5eme etage" /a /f %s\printer-format.dat' %(basedir))
  File "C:\Program Files (x86)\wapt\common.py", line 3570, in run
    return ensure_unicode(setuphelpers.run(*arg,**args))
  File "C:\Program Files (x86)\wapt\setuphelpers_windows.py", line 3863, in run
    raise CalledProcessErrorOutput(proc.returncode,cmd,''.join(output))
CalledProcessErrorOutput: Command 'printui.exe /Sr /n "Copieur schumann 5eme etage" /a /f c:\\waptdev\\wapt_av-5thFloor-printer-wapt\\printer-format.dat' returned non-zero exit status 1.
Output:

FATAL ERROR : CalledProcessErrorOutput: Command 'printui.exe /Sr /n "Copieur schumann 5eme etage" /a /f c:\\waptdev\\wapt_av-5thFloor-printer-wapt\\printer-format.dat' returned non-zero exit status 1.
Output:
Exit code:  3
Si no sabes qué información podría ser realmente importante para ti, no dudes en preguntarme si lo necesitas. Ya publico mucho y no quiero desanimar a quienes podrían querer leer mis publicaciones.
Avatar de usuario
Sfonteneau
Experto en WAPT
Mensajes: 2312
Registrado: 10 de julio de 2014 - 23:52
Contacto :

11 de junio de 2020 - 13:43

para el pedido

Código: Seleccionar todo

run(ur'printui.exe /Sr /n "Copieur schumann 5eme etage" /a /f %s\printer-format.dat' %(basedir))
¿Quizás sea necesario ejecutarlo en el contexto del usuario? con configuración de sesión
Sistema de gestión del aprendizaje (LMS)
Mensajes: 5
Inscripción: 3 de junio de 2020 - 11:22

11 de junio de 2020 - 15:59

¡La configuración de la sesión es útil! Esto demuestra que necesito explorar un poco más todo lo que wapt puede hacer por mí.

En este caso, estaba relacionado, pero no directamente. Es el ejecutable printui el que establece directamente el contexto; podemos modificarlo con indicadores al final del archivo de configuración importado. Así que aquí está la nueva línea que funciona en el contexto del usuario y se ejecuta correctamente desde "def install:"

Código: Seleccionar todo

run(ur'printui.exe /Sr /n "Copieur schumann 5eme etage" /a %s\printer-format.dat u' %(basedir))
Y, de hecho, para ir más allá, me iba a encontrar con un problema: mi importación no contendría datos formateados, porque se necesitan indicadores para especificar qué se quiere exportar. Así que hay que exportar con:

Código: Seleccionar todo

Rundll32.exe printui.dll,PrintUIEntry /Ss /n "Copieur Schumann 5eme etage" /a printer-format.dat c m u
Y importar con:

Código: Seleccionar todo

run(ur'Rundll32.exe printui.dll,PrintUIEntry /Sr /n "Copieur Schumann 5eme etage" /a %s\printer-format.dat c m p r u' %(basedir))
Lo importante es exportar e importar con la "u" para utilizar el mismo contexto.

Aquí está el tema que me ayudó:
https://stackoverflow.com/questions/173 ... completado-e
Avatar de usuario
Sfonteneau
Experto en WAPT
Mensajes: 2312
Registrado: 10 de julio de 2014 - 23:52
Contacto :

11 de junio de 2020 - 16:16

¡Muchas gracias! ¡De mucha ayuda!
rmaurisso
Mensajes: 4
Inscripción: 12 de enero de 2021 - 17:12

12 de enero de 2021 - 17:29

Buen día,
Gracias por el código para implementar y configurar las impresoras.
La implementación funciona bien, pero en Pyscripter cuando inicio la instalación para probar, la configuración de la impresora solo funciona para mi cuenta de administrador de dominio (dominio samba de anuncios).
Sin embargo, si ejecuto manualmente la siguiente línea de comando en la sesión del usuario usando cmd

Código: Seleccionar todo

RUNDLL32 PRINTUI.DLL,PrintUIEntry /Sr /n "Copieur Administratif Etage" /a C:\waptdev\tis-install-printer-Administratif_Etage-wapt\disk1\config-CAE.dat u
La configuración se aplica correctamente para mi usuario.
¿Es posible que haya pasado por alto una configuración que hace que la implementación de la impresora funcione pero no la configuración para los usuarios?
Gracias por tus comentarios
rmaurisso
Mensajes: 4
Inscripción: 12 de enero de 2021 - 17:12

13 de enero de 2021 - 11:25

Funciona con el contexto de usuario session_setup :D
. ¡Genial! :mrgreen:
Bloqueado