Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   sacar el username de windows... (https://www.clubdelphi.com/foros/showthread.php?t=23148)

marceloalegre 07-07-2005 20:41:34

sacar el username de windows...
 
alguien sabe como hacerlo? pero no usando el getusername... de trucomania. la api de windows...
eso por ahora no me sirve porque lo quiero usar en un caso especial con un servicio.... alguien conoce alguna manera distinta de sacar el username de windows... o algun componente que lo haga sin trabajar con la api?
Gracias!

dec 07-07-2005 21:14:00

Hola,

Cita:

Empezado por kanvictor
(...) eso por ahora no me sirve porque lo quiero usar en un caso especial con un servicio

¿Y qué tiene de especial el caso? ¿No puedes usar la función que refieres desde el servicio? ¿Se trata de un servicio de/para Windows? ¿Cuál es el problema, pues?

delphi.com.ar 07-07-2005 21:19:00

Seguramente el problema es que el servicio se ejecuta con LocalSystem, lo cual no esta mal pero puede escapar un poco de la lógica del programa. ¿Que pasaría si hay dos sesiones de usuarios logueados al mismo tiempo? ¿Cuál es la que quieres que tome?

dec 07-07-2005 21:30:36

Hola,

Cita:

Empezado por delphi.com.ar
¿Que pasaría si hay dos sesiones de usuarios logueados al mismo tiempo?

¿Es posible? ¿Pueden iniciarse en Windows dos sesiones diferentes? Si la respuesta es afirmativa, vas a llevar razón, puesto que:

Cita:

Empezado por SDK Win32
The GetUserName function retrieves the user name of the current thread. This is the name of the user currently logged onto the system.

Pero, ¿entonces estoy equivocado si pienso que no es posible iniciar dos sesiones en Windows por dos usuarios diferentes a la misma vez?

delphi.com.ar 07-07-2005 21:44:18

Cita:

Empezado por dec
¿Es posible? ¿Pueden iniciarse en Windows dos sesiones diferentes?

Si es posible, Terminal Server es un ejemplo de ello. Además es posible que algunos procesos sean creados con otros usuarios (RunAs y/o CreateProcessAsUser). Por eso GetUserName responde al CurrentThread.

Por otro lado puede encontrar esto:
Cita:

The WNetGetUser function retrieves the current default user name or the user name used to establish a network connection.
Sería bueno saber para que quiere el servicio el usuario..

dec 07-07-2005 21:46:22

Hola,

Gracias por las aclaraciones al respecto Federico.

marceloalegre 08-07-2005 14:03:39

Explicacion mas clara...
 
Ante todo gracias por contestar; voy a ser mas claro en el inconveniente que estoy teniendo:

sucede que desde un servicio al utilizar el getusername, no se comporta de la misma manera que ejecutandolo desde un form, ya que en vez de salir el usuario que inicio la sesion en cuestion, sale el usuario SYSTEM.
Por ahora he tratado de las siguientes maneras desde el servicio sin exito:

1- API de windows
2- Variables de entorno
3- Sacar info del bde (sirve, pero tengo que tener instalado bde :) o sea no sirve..)

Honestamente por ahora no encuentro nada prolijo.... para hacer esto...
es raro que no exista nada implementado..Además no tendría por que ser algo complicado... pero me esta generando problema la resolucion de este inconveniente.. si alguien sabe algo se los agradecere....

Muchas Gracias!

marceloalegre 08-07-2005 14:25:43

:(
 
Habia tratado solo con el GetUserName... ahora use el wnetgetuser ... y tampoco funciona ... sale usuario System al ejecutarlo desde el servicio...

delphi.com.ar 08-07-2005 14:36:30

Es que tu servicio se ejecuta con el usuario System, precisamente una de las ventajas de los servicios, es que se pueden ejecutar sin que ningún usuario este logueado en el sistema. Si quieres puedes hacer que tu servicio se ejecute con otro usuario que no sea LocalSystem, pero viendo las necesidades que tienes... ¿Tiene que ser un servicio?.

marceloalegre 08-07-2005 15:14:20

es verdad...
 
Es cierto lo que comentas, aqui hay un articulo que lo confirma:
Código:

Windows NT services run as LocalSystem by default. LocalSystem is a
predefined local account and any service running under LocalSystem:
The service can NOT open HKEY_CURRENT_USER .
The service can open HKEY_LOCAL_MACHINE\SECURITY.
The service has no network credentials and can only access network
resources using a null session. If a share or pipe is accessible by Guest via a
null session, it has access. There is a common misconception that a service
running as LocalSystem has no network access.

Gracias a esta posibilidad al margen lei que hay grandes problemas de seguridad...(que casualidad microsoft dando "la nota" jajaj)... tema interesante para tratar en algun momento...

Te cuento que lametablemente estoy trabajando en una licitacion ya aprobada, que tiene normas muy claras en cuestiones de arquitectura y estoy obligado a utilizar un servicio... :( ... estoy investigando ahora como hacer para ejecutar el servicio, pero como usuario... todavia no he encontrado en la red nada concreto de como hacer esto.. ya que todo el mundo se "arregla" por asi decirlo con un programa normal puesto en el run del registry....

Bueno si hay algo en lo que puedas aconsejarme, estaré mas que atento, y Muchas Gracias!!

delphi.com.ar 08-07-2005 15:25:07

Cita:

Empezado por kanvictor
... estoy investigando ahora como hacer para ejecutar el servicio, pero como usuario...

Es mas que sencillo: Inicio \ Ejecutar \ services.msc. Buscas tu servicio, haces doble click sobre el mismo y te va a mostrar una ventana con la configuración del servicio, vas a la solapa: "Iniciar Sesión", y en lugar de tildar la opción "Cuenta del sistema local" (LocalSystem) elijes: "Esata cuenta" y pones el usuario, la contraseña y su confirmación.

Saludos!

marceloalegre 08-07-2005 15:39:40

ese es el problema :) lamentablemente... no se que sesion puede usar quien use la aplicacion....
o sea mi idea o plan, minimizando lo mas posible seria llegar a poder hacer algo de esto:
Código:

If SeLogueoUnUserNoSystem Then
hacer lo que yo quiera...

poner esto con un timer o ciclo dentro del servicio ...

el tema es que estando el servicio ejecutandose en el contexto de LocalSystem no tengo manera de preguntar si se logueo alguien porque estoy dentro de system....

es todo un tema, no le veo una solución muy practica; ... y muchas gracias por responder y tan rapido!!

delphi.com.ar 08-07-2005 16:00:38

Fíjate si esto puede servirte de algo:
http://msdn.microsoft.com/library/de...n_packages.asp
http://www.elists.org/pipermail/delp...il/017444.html

Con este código podrías notificar a tu proceso cuando un usuario se loguea y cuando se desloguea, y tendrías que mantener una lista de los mismos.

marceloalegre 08-07-2005 16:06:42

Estaba pensado... voy a tener que agarrar para otro lado.... ejemplo que se me ocurre, puede ser ver las aplicaciones que se cargan despues de loguear un usuario... y preguntar por si existe alguna de esas (de las que carga windows por obligatoriamente) como el explorer.exe o alguna de esas... tendria que ver si eso da resultado... alguna forma tiene que existir :) tiene que existir algun comportamiento por el cual pueda preguntar aunque este en el entorno de localsystem...

Saludos!..

marceloalegre 08-07-2005 16:08:14

Epa! cuando estaba escribiendo lo anteriormente dicho vi tu respuesta, voy a ver que puedo hacer con eso, y gracias!

delphi.com.ar 08-07-2005 16:08:27

Fíjate mi comentario anterior... ;)

delphi.com.ar 08-07-2005 16:09:08

Cita:

Empezado por kanvictor
Epa! cuando estaba escribiendo lo anteriormente dicho vi tu respuesta, voy a ver que puedo hacer con eso, y gracias!

Estamos verdaderamente cruzados!.. :D

marceloalegre 08-07-2005 16:15:08

JajJAja! si muy cruzados! y MUCHISIMAS GRACIAS!!, en cuanto tenga la respuesta funcional al caso, la posteo para todos; nunca se sabe a quien le puede suceder lo mismo en algun momento...

Saludos!

marceloalegre 11-07-2005 14:00:33

Respuesta al problema...
 
Para que quede registrado, despues de muchas opciones complejas para solucionar este asunto me decidi por lo que dice en este post:
http://www.clubdelphi.com/foros/showthread.php?t=22018

al controlar la ejecucion del explorer.exe como shell puedo decir que a partir de ahi, se logueo un usuario. :)

Saludos a todos!


La franja horaria es GMT +2. Ahora son las 02:28:45.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi