FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Impresoras en Terminal Server
Posts: 166
Joined: Mon Dec 12, 2005 09:56 AM
Impresoras en Terminal Server
Posted: Wed Jan 31, 2024 06: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

Posts: 1144
Joined: Mon Feb 05, 2007 07:15 PM
Re: Impresoras en Terminal Server
Posted: Wed Jan 31, 2024 06: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:

  2. 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.

  3. Comprobar Drivers de Impresora:

  4. 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.

  5. Configuraci贸n de Grupo de Seguridad:

  6. 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.

  7. Configuraci贸n del Servidor de Impresi贸n:

  8. Abre "Administrador de impresi贸n" en el servidor.

  9. Verifica que las impresoras est茅n compartidas.

  10. Aseg煤rate de que los permisos de compartici贸n est茅n configurados adecuadamente.

  11. Habilitar Redirecci贸n de Impresoras:

  12. Abre el Editor de directivas de seguridad local (secpol.msc) en el servidor.

  13. Navega a Configuraci贸n del equipo -> Configuraci贸n de Windows -> Configuraci贸n de seguridad -> Directivas locales -> Asignaci贸n de derechos de usuario.

  14. Busca el derecho "Redirigir dispositivos Plug and Play" y aseg煤rate de que el grupo "Usuarios de escritorio remoto" tenga ese derecho.

  15. Reiniciar el Servicio de Escritorio Remoto:

  16. Puedes reiniciar el servicio de Escritorio remoto (Terminal Services) para aplicar los cambios.

  17. Probar la Impresi贸n:

  18. Con茅ctate nuevamente a la sesi贸n remota y prueba imprimir desde una aplicaci贸n.

  19. Soluci贸n de Problemas:

  20. 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 "
Posts: 166
Joined: Mon Dec 12, 2005 09:56 AM
Re: Impresoras en Terminal Server
Posted: Wed Feb 07, 2024 03: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铆.

Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Impresoras en Terminal Server
Posted: Wed Feb 07, 2024 04:08 PM
Jo茫o Santos - S茫o Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 166
Joined: Mon Dec 12, 2005 09:56 AM
Re: Impresoras en Terminal Server
Posted: 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 (fw): Select all Collapse
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
Posts: 318
Joined: Fri Jan 14, 2022 08:37 AM
Re: Impresoras en Terminal Server
Posted: 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

Posts: 410
Joined: Sun Jan 31, 2010 03:30 PM
Re: Impresoras en Terminal Server
Posted: Sat Feb 24, 2024 09:29 PM
Buena tarde...

Lo solucione asi :
Code (fw): Select all Collapse
// 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

Continue the discussion