Donde el ocio y la falta de oficio pagan y se dan el vuelto

6.15.2005

De programacion y vainas asi

Para los que no saben, yo trabajo como administrador de sistemas en una compañia aqui en USA. Una de mis funciones de trabajo es hacer programas que complementen las aplicaciones que tenemos. Por ejemplo, el programa que usamos para mantener la informacion de produccion se llama Odyssey. La compañia donde trabajo es una fundicion de metales y debido a la estructura de la compañia y la naturaleza del mercado, Odyssey no cumple con todos los requisitos necesarios para mantener toda la informacion. Aqui es donde vengo yo. La compañia me pidio que creara una aplicacion para mantener y procesar los datos adicionales que Odyssey no puede. La aplicacion que hice se llama WardAssistant y esta hecha con Microsoft Access 97. Esta aplicacion lee informacion de Odyssey, la procesa y produce archivos de texto que despues pueden ser importados otra vez a Odyssey. WardAssistant no es la unica aplicacion que he hecho. Tambien estan HRAssistant, la base de datos de recursos
humanos, MISAssistant que es la base de datos del departamento de informatica, y
EDIAssistant que sirve como puente entre Odyssey y nuestro sistema de transmision de datos electronicos (Electronic Data Interchange). Microsoft Access 97 usa VBA como lenguage de programacion, que es como un Visual Basic pero mas light. Tiene la mayoria de la funcionalidad de Visual Basic y tiene la ventaja que puede usar las formas, reportes y tablas de Microsoft Access sin tener necesidad de programacion adicional.

Una de mis funciones favoritas cuando estoy programando para Windows, es el Registry
(disculpen que no se como se llaman la mayoria de estas cosas en español). Cuando se
programa para una red con mas de 50 usuarios, el registry es muy util. Ahi puedes poner los valores de configuracion necesario para cualquier aplicacion que se necesite.

Como tengo varias aplicaciones que mantener y configurar, y cada una de las 50 computadoras de la compañia tiene una, dos o hasta todas las aplicaciones, necesito una manera mas facil de actualizar los programas, asi que hize WCLauncher.

WCLauncher es un programa muy simple que compara la version que esta instalada en la
computadora con la version del programa que se encuentra en uno de los servidores. Si la version que esta en el servidor cambia, el programa notifica al usuario que hay una nueva version, baja los archivos actualizados, los instala y continua a correr la aplicacion que el usuario necesita. Si no hay cambios, entonces WCLauncher corre la aplicacion del usuario y el usuario ni se da cuenta que este programa acaba de correr.

Hasta hace poco estuve teniendo un problema con WCLauncher. WCLauncher lee la informacion de la version local que esta en el registry. Si el usuario que esta usando la computadora no tiene el permiso necesario para leer o escribir valores en el registry, el programa muestra un mensaje diciendo que la aplicacion no esta instalada y cierra. Hoy descubri el por que hace esto.

Cuando se abre una llave del registry, o registry key, se necesita especificar que clase de seguridad se necesita. Si la seguridad que se especifica en el programa no concuerda con la seguridad que el usuario tiene, la llave o key no abre. Esto es parte del diseño de Windows para prevenir que algun programa malicioso trate de darle la vuelta a la seguridad del usuario y haga lo que quiera en el sistema. Windows corre todos los programas con el mismo contexto de seguridad del usuario.

Descubri que al usar RegKeyOpenEx o RegCreateKeyEx estaba usando la constante KEY_ALL_ACCESS. Por definicion KEY_ALL_ACCESS utiliza las constantes STANDARD_RIGHTS_ALL, KEY_QUERY_VALUE, KEY_SET_VALUE, KEY_CREATE_SUB_KEY, KEY_ENUMERATE_SUB_KEYS, KEY_NOTIFY, KEY_CREATE_LINK, y SYNCHRONIZE. Despues de estudiar los derechos de seguridad que Windows XP le da al grupo de Power Users, me di cuenta que excluye KEY_CREATE_LINK. Despues de mentarle la madre a Bill Gates descubri que hay otras dos constantes, KEY_READ y KEY_WRITE. Que bolas!!! KEY_READ es STANDARD_RIGHTS_READ, KEY_QUERY_VALUE, KEY_ENUMERATE_SUBKEYS y KEY_NOTIFY, y KEY_WRITE es STANDARD_RIGHTS_WRITE, KEY_SET_VALUE, KEY_CREATE_SUB_KEY. Asi que cree mi propia constante KEY_READ_WRITE que combina KEY_READ y KEY_WRITE. Santo remedio!!! Ahora WCLauncher lee los registry keys sin importar cual usuario (si Administrator o Power User) este en la computadora.

Bueno, en pocas palabras, ya arregle el problema que tenia y les queria contar. Quizas la mayoria no entienda ni papa sobre esto, pero se que habran algunos que si lo entiendan. Despues voy a escribir unos ejemplos de como abrir un key, leer un valor y cerrar el key.

[por Mascavidrio - 3:19 p. m.]

3 comentarios:


Pos la verdad... no entendí ni papa... siempre me ha parecido curioso cómo las computadoras, que son de vital importancia para cualquier profesional (o no) y tan fáciles de manejar (una vez que aprendes a jurungar como digo yo) sean a la vez un complicado sistema de códigos y cosas extrañas... siempre he dicho que la inteligencia es la capacidad de resolver problemas, si resolviste eso... concluye tú (buen blog, lo estaré revisando a menudo a ver si aprendo algo de estas cosas

Saludos.

por Blogger Depeco - 6/15/2005 04:24:00 p. m.  


Sr. Mark en realidad no entiendo ni papa de lo que dices, pero eso si, no me quedare con los brazos cruzados, por lo menos investigare que rayos estas diciendo.Lo unico que sè de programacion es VisualBasic 6.0 .Solamente lo basico esto me lo enseñaron para una aplicacion matematica...

Mis Saludos Sr. Mask
y dile a Maria Caraota que deje a flojera y se ponga a escribir(jjee-je.)

bye

por Blogger Brakewing - 6/15/2005 07:32:00 p. m.  


te felicito mi cielo por arreglar el noseque de la maquina n_n

por Blogger maria caraota - 6/18/2005 01:31:00 p. m.  


Publicar un comentario

Inicio