Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-04-2008
alquimista alquimista is offline
Miembro
 
Registrado: ene 2008
Posts: 203
Poder: 17
alquimista Va por buen camino
Cool Por que no graba en Win.ini

Intento ejecutar al inicio de windows un programa y deseo implementar todos los métodos de arranque: registro, win.ini (run=), etc..

Al intentar grabar en Win.ini no graba nada. Si cambio el nombre a miwin.ini si que funciona.
¿Está protegido el Win.ini? tengo Windows Xp Sp2...
o estoy haciendo algo mal.

Código Delphi [-]
pathlog:=GetEnvironmentVariable('SYSTEMROOT');
   pathlog:=Pathlog+'\win.ini';
   Ini := TIniFile.Create(pathlog);
   try      
       Ini.writestring('Windows', 'run', Application.ExeName);
   finally
     Ini.Free;   
   end;

Última edición por alquimista fecha: 22-04-2008 a las 01:56:09.
Responder Con Cita
  #2  
Antiguo 22-04-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

¿No obtienes ningún error que puedas referir aquí? En todo caso, ¿para qué necesitas indicar un "autoinicio" en todos y cada uno de los lugares posibles? ¿No bastaría con uno, en el Registro de Windows, por ejemplo?
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 22-04-2008
alquimista alquimista is offline
Miembro
 
Registrado: ene 2008
Posts: 203
Poder: 17
alquimista Va por buen camino
Smile

No obtengo ningún error ni de excepción ni nada.

Es para realizar un programa anti aplicaciones y juegos para alumnos.
El método de registro lo anulan entrando con msconfig y quitando todos los programas de inicio.
Como algunos son mayores se les deja como administrador de equipo (para que instalen programas como C o similar) y eso es lo peor. A pesar de ser mayores juegan o hacen otras cosas.
El método de win.ini al no ser tan nuevo, es probable que no lo conozcan y así dure mas en marcha y con poco mantenimiento.
De todos modos añadiendo el msconfig a la lista de programas no aceptados creo que podre hacerlo funcionar mas tiempo.
Lo ideal sería crear un servicio para que siempre estuviera activo el programa aunque lo cierren, pero no se como hacerlo.

El programa esta hecho pero le faltan muchos flecos de seguridad todavía.
Responder Con Cita
  #4  
Antiguo 22-04-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Es posible que Windows esté protegiendo ese acceso dependiendo de los permisos que tengas.
Si haces la prueba de modificarlo "a mano" (desde el notepad, por ejemplo) ¿Tienes algun problema?

Otra cosa, es lo que comenta Dec, y en lo que coincido. ¿Para qué necesitas añadir el programa en varios sitio de "autoarranque"? Con eso sólo conseguirás que se ejecute varias veces...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 22-04-2008
alquimista alquimista is offline
Miembro
 
Registrado: ene 2008
Posts: 203
Poder: 17
alquimista Va por buen camino
Smile

Lo puedo editar a mano desde notepad.
El programa solo admite una ejecución.

No obtengo ningún error ni de excepción ni nada.

Es para realizar un programa anti aplicaciones y juegos para alumnos.
El método de registro lo anulan entrando con msconfig y quitando todos los programas de inicio.
Como algunos son mayores se les deja como administrador de equipo (para que instalen programas como C o similar) y eso es lo peor. A pesar de ser mayores juegan o hacen otras cosas.
El método de win.ini al no ser tan nuevo, es probable que no lo conozcan y así dure mas en marcha y con poco mantenimiento.
De todos modos añadiendo el msconfig a la lista de programas no aceptados creo que podre hacerlo funcionar mas tiempo.
Lo ideal sería crear un servicio para que siempre estuviera activo el programa aunque lo cierren, pero no se como hacerlo.

El programa esta hecho pero le faltan muchos flecos de seguridad todavía.

Última edición por alquimista fecha: 22-04-2008 a las 11:05:44.
Responder Con Cita
  #6  
Antiguo 22-04-2008
alquimista alquimista is offline
Miembro
 
Registrado: ene 2008
Posts: 203
Poder: 17
alquimista Va por buen camino
Acabo de ver con un programa anti espía que cada vez que ejecuto el programa, los cambios los quiere hacer en el registro de Windows en vez de en el archivo win.ini.
¿¿¿Es posible que la versión de delphi (2006) o el windows, pase del win.ini usando la unidad inifiles???
el caso es que con otro ini va bien.
Responder Con Cita
  #7  
Antiguo 22-04-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Hasta donde yo sé, el win.ini queda sólo por compatibilidad con programas antiguos que requieran leer datos de ahí. Por lo mismo, no es de extrañar, que al escribir en él, el S.O mapee la escritura al registro. De hecho, según observé ayer, lo mapea a la clave

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows: run

// Saludos
Responder Con Cita
  #8  
Antiguo 22-04-2008
Avatar de Black_Ocean
Black_Ocean Black_Ocean is offline
Miembro
 
Registrado: nov 2006
Posts: 128
Poder: 18
Black_Ocean Va por buen camino
Los accesos de escritura en Win.INI son monitoreados/bloqueados por la mayoría de los antivirus/antispyware actuales que estén en tiempo real (en ejecución todo el tiempo) en el PC. porque esas entradas ya no son usadas por programas modernos, por lo que, por seguridad, al detectar una escritura externa en dicho archivo, es bloqueado o simplemente se restaura inmediatamente el original o una copia del mismo, por lo que en este caso, no se generaría una excepción de escritura por la aplicación y en depuración, Delphi no mostraría tal excepción porque no existiría.

Muchos programas maliciosos tales como virus y malware en general, se valen por estas entradas de Win.INI, por lo que si tu quieres que una aplicación se inicie cada vez cuando un usuario se loguée en el sistema o comience una nueva sesión, lo correcto es agregar un valor/clave en el registro de Windows: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run y no en otras áreas de inicio, porque podría ser tomado como algo no deseado, excepto que sea en verdad un servicio, módulo, etc.

Para servicios, módulos, etc de incio, se hace de otra forma, ya que debes registralos en el sistema como tales.

Saludos y espero que te haya ayudado.

Última edición por Black_Ocean fecha: 22-04-2008 a las 17:35:50.
Responder Con Cita
  #9  
Antiguo 22-04-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
No sé si los antivirus hagan algo así. En todo caso, acabo de deshabilitar el mío y vuelto a hacer la prueba y ha sucedido como dije antes: el archivo win.ini queda sin modificar y el cambio se hace en la entrada del registro mencionada. Por ello reafimo mi opinión de que es el sistema operativo el que hace el mapeo.

// Saludos
Responder Con Cita
  #10  
Antiguo 22-04-2008
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
Cool Utiliza las directivas de grupo...

Hola alquimista

Si trabajas en una Red, y tienes un Servidor de Windows 2000 o 2003 Server, no te seria más conveniente utilizar las politicas de grupo ???

Windows XP posee un editor de politicas de usuario (locales), a las cuales puedes acceder como gpedit.msc... Si estas trabajando bajo dominio de 2000 o 2003 server, prevalen las politicas del servidor...

Si trabajas con usuarios puedes crear grupos de trabajo y asignarles politicas grupales para que te deje modificar el windows.. instalar programas... utilizar algun programa.. incluso puedes trabajar con el direccionamiento de perfiles.. en dondes si un usuario esta en una estacion con sus datos... al iniciar la sesión en otra estación se cargaria el mismo perfila con sus datos...(windows 2003 server permite esto.. en el 2000 server es un poco más complicado...)...

incluso puedes usar un protector de pantalla llamado winexit.src... el cual despues de un cierto tiempo de cierra la sesion (forzando el cierre de cualquier aplicación...)... en parte es bueno.. (al menos a mi me funciona...)... ya que cada usuario posee una configuración a la impresora con control de copia... y si dejan de usar la estacion por cierto tiempo esta se cierra ...(perdiendo cualquier cambio que no se haya guardado...)... si bien eso es malo... me impide que otro usuario imprima con la sesion de otro ...

Salu2
__________________
BlueSteel

Última edición por BlueSteel fecha: 22-04-2008 a las 18:36:19. Razón: falto explicación
Responder Con Cita
  #11  
Antiguo 22-04-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Cita:
Empezado por alquimista Ver Mensaje
...Es para realizar un programa anti aplicaciones y juegos para alumnos.
El método de registro lo anulan entrando con msconfig y quitando todos los programas de inicio.
Como algunos son mayores se les deja como administrador de equipo (para que instalen programas como C o similar) y eso es lo peor. A pesar de ser mayores juegan o hacen otras cosas.
El método de win.ini al no ser tan nuevo, es probable que no lo conozcan y así dure mas en marcha y con poco mantenimiento.
De todos modos añadiendo el msconfig a la lista de programas no aceptados creo que podre hacerlo funcionar mas tiempo.
Lo ideal sería crear un servicio para que siempre estuviera activo el programa aunque lo cierren, pero no se como hacerlo.

El programa esta hecho pero le faltan muchos flecos de seguridad todavía.
Con la tercera repetición juraría que nos estas intentando convencer.

En fin; el código que pondre no lo pensé para un INI, pero dado el contenido "por defecto" del archivo en cuestión funciona puesto que no existe la seccion "windows";

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
 hFile, Size: Integer;
 FileName: array [0..MAX_PATH-1] of Char;
 Buffer: array [0..1023] of Char;
begin
 GetWindowsDirectory(@FileName, MAX_PATH);
 hFile := _lopen(lstrcat(@FileName, '\win.ini'), 0);
 Size := _lread(hFile, @Buffer, SizeOf(Buffer));
 CloseHandle(hFile);
 hFile := _lcreat(@FileName, 0);
 _lwrite(hFile, @Buffer, Size);
 _lwrite(hFile, '[windows]'#13#10'run=', 15);
 _lwrite(hFile, @FileName, GetModuleFileName(0, @FileName, MAX_PATH));
 CloseHandle(hFile);
end;

La idea aplicable a cualquier otro codigo es; [open > read > close > erase > create > write > close].

EDITO; Ahora que leo detenidamente el mensaje doblemente repetido, entiendo mejor que lo que se esta intentando hacer es de una forma heterodoxa. La seccion que se requiere de dicho archivo de configuracion en NT es otra a la mostrada "arriba".

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
 hKey: Windows.HKEY;
 FileName: array [0..MAX_PATH-1] of Char;
begin
 RegOpenKey(HKEY_LOCAL_MACHINE, 'software\microsoft\windows nt\currentversion\winlogon', hKey);
 RegSetValueEx(hKey, 'run', 0, REG_SZ, @FileName, GetModuleFileName(0, @FileName, SizeOf(FileName)));
 RegCloseKey(hKey);
end;

Saludos

Última edición por cHackAll fecha: 22-04-2008 a las 19:51:55.
Responder Con Cita
  #12  
Antiguo 23-04-2008
alquimista alquimista is offline
Miembro
 
Registrado: ene 2008
Posts: 203
Poder: 17
alquimista Va por buen camino
Las repeticiones no han sido de forma deliberada
La verdad es que parece que Windows Xp protege a ciertos archivos del S.O.
Intenté eliminar msconfig del pc y lo volvía a restaurar.
Cita:
Si trabajas en una Red, y tienes un Servidor de Windows 2000 o 2003 Server, no te seria más conveniente utilizar las politicas de grupo ???
Lamentablemente es un sistema sin centralizar y cada pc es un coladero de software, juegos y virus incluso a los pocos dias de restaurar un pc con programas tipo ghost.

Gracias por las respuestas, ya me queda todo más claro. Ahora solo me queda lo de crear un servicio que intente dejar en ejecución el programa matacosas. Any sugerencia???
Saludos maestros de delphi....

cHackAll funciona ok tu primer procedure. Asombroso!!!! Parece que este sea el foro de C++. (_lwrite, _lopen etc..)

Última edición por alquimista fecha: 23-04-2008 a las 10:39:47.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Algo curioso al salir de un edit... me lo graba JoanKa Varios 6 20-01-2007 00:26:42
query no Graba , se cierra juanmaster Tablas planas 9 12-12-2006 23:52:21
Grabar En SQL Campos Decimales, Solo me graba enteros? freddiaz07 SQL 2 07-09-2006 16:24:04
lookup + dbgrid: no graba jonmendi Conexión con bases de datos 4 12-01-2006 08:21:53
Cuando trabajan dos usuarios simultaneos solo graba la factura de uno tulio Firebird e Interbase 11 28-10-2003 12:10:34


La franja horaria es GMT +2. Ahora son las 13:49:50.


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
Copyright 1996-2007 Club Delphi