Impresoras en Terminal Server

Impresoras en Terminal Server

Postby Sebastián Almirón » Wed Jan 31, 2024 6:40 pm

Hola a todos
Tengo en una empresa varios ordenadores conectados a un servidor a través de Terminal Server.
Cada ordenador tiene una o varias impresoras locales y en mi programa tengo una configuración para seleccionar cada una según su función (etiquetas, partes de trabajo, documentos, etc.).
Al nombre de cada impresora le añado "xx redireccionado" (donde xx es el número de sesión) para que coincida con el nombre que aparece en la sesión de terminal server.
Haciendo un Alert(impresora) me da el nombre correcto, es decir la impresora con el xx redireccionado.
Esto me ha funcionado durante años sin mayor problema, pero sin saber a que es debido, ahora cuando hago una impresión me pide que seleccione la impresora y algunas de ellas ni siquiera me aparecen. Pero lo que es más grave es que cuando imprimen no respeta el tamaño de las etiquetas configurada en local.
Dejó de funcionar una mañana entre la impresión de una etiqueta y la siguiente media hora después, sin haber modificado mi programa ni haber actualizado nada del servidor (tengo deshabilitadas las actualizaciones automáticas)

Por lo que he podido ver, en el método NEW de TPrinter, la llamada a las funciones que deberian cambiar a la impresora correcta no están funcionando, he probado con SetDefaultPrinter() que he visto por ahí, pero no hay manera.

Alguna idea o como haceis para usar las impresoras locales en una sesión remota ?
Saludos
User avatar
Sebastián Almirón
 
Posts: 155
Joined: Mon Dec 12, 2005 9:56 am
Location: Moralzarzal - Spain

Re: Impresoras en Terminal Server

Postby sysctrl2 » Wed Jan 31, 2024 6:59 pm

configurar impresoras locales en Windows Terminal server
CHATGPT
Configurar impresoras locales en un servidor de Terminal Server en Windows implica permitir que los usuarios conectados al servidor puedan imprimir en sus impresoras locales desde una sesión remota. Aquí hay algunos pasos generales que puedes seguir:

**Nota:** Asegúrate de tener permisos administrativos en el servidor para realizar estas configuraciones.

1. **Conectar la Impresora Local:**
- Al conectarte a la sesión remota, asegúrate de seleccionar la opción para "Conectar las impresoras locales" en las opciones de recursos locales del cliente.

2. **Comprobar Drivers de Impresora:**
- Asegúrate de que los controladores de impresora adecuados estén instalados tanto en el servidor como en la máquina cliente. Si es posible, utiliza los mismos controladores en ambas máquinas.

3. **Configuración de Grupo de Seguridad:**
- Asegúrate de que el grupo de seguridad "Usuarios de escritorio remoto" tenga permisos para acceder a las impresoras. Puedes hacer esto a través de la herramienta "Directiva de seguridad local" en el servidor.

4. **Configuración del Servidor de Impresión:**
- Abre "Administrador de impresión" en el servidor.
- Verifica que las impresoras estén compartidas.
- Asegúrate de que los permisos de compartición estén configurados adecuadamente.

5. **Habilitar Redirección de Impresoras:**
- Abre el Editor de directivas de seguridad local (`secpol.msc`) en el servidor.
- Navega a Configuración del equipo -> Configuración de Windows -> Configuración de seguridad -> Directivas locales -> Asignación de derechos de usuario.
- Busca el derecho "Redirigir dispositivos Plug and Play" y asegúrate de que el grupo "Usuarios de escritorio remoto" tenga ese derecho.

6. **Reiniciar el Servicio de Escritorio Remoto:**
- Puedes reiniciar el servicio de Escritorio remoto (Terminal Services) para aplicar los cambios.

7. **Probar la Impresión:**
- Conéctate nuevamente a la sesión remota y prueba imprimir desde una aplicación.

8. **Solución de Problemas:**
- Si enfrentas problemas, revisa los registros de eventos en el servidor para obtener información sobre cualquier error relacionado con la impresión remota.

Recuerda que los pasos pueden variar ligeramente dependiendo de la versión específica de Windows Server que estés utilizando. Siempre es recomendable consultar la documentación específica de Microsoft para tu versión de Windows Server para obtener información detallada sobre la configuración.
Cesar Cortes Cruz
SysCtrl Software
Mexico

' Sin +- FWH es mejor "
User avatar
sysctrl2
 
Posts: 951
Joined: Mon Feb 05, 2007 7:15 pm

Re: Impresoras en Terminal Server

Postby Sebastián Almirón » Wed Feb 07, 2024 3:59 pm

Bueno, ya he encontrado el motivo de tantos y repentinos problemas, lo pongo aquí por si a alguien le pasa lo mismo.

Cada vez que un usuario se conecta al servidor por Terminal Sever, las impresoras locales del equipo de ese usuario se añaden con el mismo nombre más "(xx redireccionado)", siendo xx el nº de sesión. En nuestro programa tenemos que tener un sistema por el cual cambiemos el nº de sesión por el valor de la sesión actual, hasta aquí todo normal y como dije antes esto me llevaba funcionando años sin problemas.

Lo que ocurre es que las impresoras redireccionadas no se borran cuando se cierra la sesión en windows server, con lo cual se van acumulando hasta que llega un momento que cuando creas un objeto tprinter "PRINT oPrint TO cprn", te salta el cuadro de dialogo para seleccionar la impresora aunque cprn tenga el nombre y redireccionado correcto.
Mirando el registro de windows me encuentro con que en la rama:

HKCU\Software\Microsoft\WindowsNT\Currentversion\Devices
y en
HKCU\Software\Microsoft\WindowsNT\Currentversion\PrintersPorts

hay varios cientos de impresoras redigiridas, es decir las mismas cuatro que tiene el equpo local, pero con un numero de sesión diferente.
Ha sido vaciar ambas ramas, cerrar la sesión de windows server y volver a entrar y asunto solucionado.
Lo lógico sería que esas impresoras se eliminasen a cerrar la sesión, pero no es así.
User avatar
Sebastián Almirón
 
Posts: 155
Joined: Mon Dec 12, 2005 9:56 am
Location: Moralzarzal - Spain

Re: Impresoras en Terminal Server

Postby karinha » Wed Feb 07, 2024 4:08 pm

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Impresoras en Terminal Server

Postby Sebastián Almirón » Thu Feb 08, 2024 10:38 am

Hola João, no, eso ya lo se y no tiene nada que ver con el problema que plateo.

En realidad es un problema no se si de Fivewin, de Harbour o las api de Windows.
Cuando con un equipo te conectas con el servidor por Terminal Server, si por ejemplo abres el Bloc de Notas en el Servidor y le das a imprimir, solo te muestra las impresoras que debe mostrarte, incluyendo las redireccionadas de la sesión actual.
Por el contrario en nuestra aplicación, en el menú de impresión de un RPREVIEW aparecen todas las de la sección "Devices" del registro de windows que de indicado antes, cosa que no debería ocurrir. Ocurre lo mismo con el array que devuelve la función AGetPrinters(), ya que en ambos casos se utiliza GetProfString( "Devices", 0 ) que a su vez llama a GetPrivateProfileString() de la api.
De esto me dí cuenta hace tiempo y para evitarlo añadí lo siguiente:
Code: Select all  Expand view

METHOD PrintersMenu() CLASS TPreview

   local oPop, aPrinters, m, n := 1, aborra := {}, npos := 0 //WinGetPrinters() //aGetPrinters()

   cprinters := strtran( GetProfstring('Devices'),chr(0),CRLF)
   aprinters := c2array(cprinters,chr(13))

   // lo siguiente es para quitar las impresoras redireccionadas que no sean de la conexion actual
   m := len(aprinters)
   sysrefresh()
   diimpre()  //Pone en la variable pública "redire" el (xx redireccionado)
   sysrefresh()
   m := len(aPrinters)


   for n = 1 to m
       npos := at('redireccionado',aprinters[n])
       if npos > 0
          if at(redire,aprinters[n]) = 0
             aadd(aborra,aprinters[n])
          endif
       endif
   next n

   sysrefresh()
   for n = 1 to len(aborra)
       npos := ascan(aprinters,aborra[n])
       if npos > 0
          adel(aprinters,npos)
          asize(aprinters, len(aprinters)-1)
       endif
   next n
   sysrefresh()

   // hasta aqui


   MENU oPop POPUP
 


Bueno, ya veo que pocos utilizais Terminal Server y que no os habeís topado con este problema.
Disculpad por por charla
User avatar
Sebastián Almirón
 
Posts: 155
Joined: Mon Dec 12, 2005 9:56 am
Location: Moralzarzal - Spain

Re: Impresoras en Terminal Server

Postby paquitohm » Thu Feb 08, 2024 12:41 pm

Hola Sebastian,

Realmente no me he topado con el problema quizas simplemente porque los usuarios no me lo han hecho saber. No lo sé. En general en mi programa el usuario utiliza la impresora que está preasignada para cada documento para cada usuario. De esta manera casi nunca tiene que escoger impresora, simplemente le pulsa imprimir et voilá

En cualquier caso me han gustado mucho sus explicaciones y comentarios.

Gracias
paquitohm
 
Posts: 108
Joined: Fri Jan 14, 2022 8:37 am

Re: Impresoras en Terminal Server

Postby russimicro » Sat Feb 24, 2024 9:29 pm

Buena tarde...

Lo solucione asi :

Code: Select all  Expand view


// M->cImpRemNr1 := IMPRESORA_DEFINIDA_POR_DEFECTO(1)  // IMPRESORA PRINCIPAL

// M->cImpRemNr2 := IMPRESORA_DEFINIDA_POR_DEFECTO(2)  // IMPRESORA ALTERNA


function buscaImpresoraRedireccionada()

 local aPrinters := GetPrinters(.T.), j := 0
 local nPosCar := 0
 local nPosCa2 := 0


 if !empty(M->cImpRemNr2)
    nPosCar := atnum("redireccionado",M->cImpRemNr2,1)

    if nPosCar == 0
       nPosCar := atnum("redirected",M->cImpRemNr2,1)
    endif

    if nPosCar > 0

       nPosCa2 := atnum("(",M->cImpRemNr2,1)

       for j := 1 to len(aPrinters)

           if UPPER(SUBS(aPrinters[J,1],1,nPosCa2)) ==  UPPER(SUBS(M->cImpRemNr2,1,nPosCa2))
              M->cImpRemNr2 := aPrinters[J,1]
           endif

       next j

    endif
 endif

 if !empty(M->cImpRemNr1)
    nPosCar := atnum("redireccionado",M->cImpRemNr1,1)

    if nPosCar == 0
       nPosCar := atnum("redirected",M->cImpRemNr1,1)
    endif

    if nPosCar > 0

       nPosCa2 := atnum("(",M->cImpRemNr1,1)

       for j := 1 to len(aPrinters)

           if UPPER(SUBS(aPrinters[J,1],1,nPosCa2)) ==  UPPER(SUBS(M->cImpRemNr1,1,nPosCa2))
              M->cImpRemNr1 := aPrinters[J,1]
           endif

       next j

    endif

 endif


return nil


 
russimicro
 
Posts: 225
Joined: Sun Jan 31, 2010 3:30 pm
Location: Bucaramanga - Colombia


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 83 guests