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 14-12-2007
mierda mierda is offline
Miembro
 
Registrado: may 2006
Posts: 129
Poder: 18
mierda Va por buen camino
Ejecutar exe desde servicio

Hola amigüitos, estoy creando un servicio desde delphi 7 para que cuando se inserta un cd me lo detecte y ejecute un .exe que hay en el cd.

Ahora mismo pongo un timer cada X segundos que intente verificar si existe un fichero, con el fileexist nunca me dice que esta el fichero y ya ni hablar de intentar ejecutarlo, ya que dentro de un servicio dicen que solo sirve el createprocess y no me va tampoco.

Aqui pongo el codigo pa detectar el exe ....

codigo:

Código Delphi [-]
 
unit Unit2;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;
type
  TForm2 = class(TForm)
    Memo1: TMemo;
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.Timer1Timer(Sender: TObject);
const
FileName = 'c:\logdate.txt';
var
F: TextFile;
aguardar: string;
midrive: char;
begin
{
For miDrive:='c' to 'z' do
  begin
    memo1.Lines.add ('Intentandolo con la letra ' + pchar(midrive));
    If GetDriveType (pchar(midrive + ':\')) = DRIVE_CDROM then
      begin
        if FileExists(pchar(midrive + ':\') + 'CdAct.exe') then
          aguardar := 'Se ha encontrado el fichero'
        else
          aguardar := 'NOOOOOO se ha encontrado el fichero'
      end;
  end;
}
if FileExists('D:\CdAct.exe') then
  aguardar := 'Se ha encontrado el fichero'
else
  aguardar := 'NOOOOOO se ha encontrado el fichero';
AssignFile(f,FileName);
if FileExists(FileName) then Append(f)
else
Rewrite(f);
writeln(f,aguardar);
//ShowMessage(DateTimeToStr(Now));
CloseFile(f);
end;
end.

Alguna idea?!?!
Responder Con Cita
  #2  
Antiguo 14-12-2007
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Bueno, lo primero que veo es que el programa toma como unidad de cd la unidad 'D:\', pero eso no es así en todos los ordenadores. Además, eso no detecta si se acaba de introducir un cd. Aunque por el código comentado parece que intentaste algo bueno

El caso es detectar cuándo se introduce un CD, y saber a qué unidad le corresponde (esto es, D, E, F, G, H....). Para eso nuestro desaparecido amigo roman hizo un componente genial. Lo tiene en su página: http://romansg.net/index.php?pg=delphi_componentes.

Y ya ahí, cuando se introduzca un CD, comprobar si existe el ejecutable (o cualquier otro archivo) y hacer lo que quieras con él

Saludos.
Responder Con Cita
  #3  
Antiguo 14-12-2007
mierda mierda is offline
Miembro
 
Registrado: may 2006
Posts: 129
Poder: 18
mierda Va por buen camino
Hola IxMike ...

Hola IxMike, tengo el gran programa de nuestro amigo Roman, el problema es que en todos los ordenadores que lo he probado da una unidad mas de la que le toca ... por ejemplo si mi cd esta en el d:\ el me dice el e:\, y si lo tengo en j:\ me da la k:\ .

El programa con ese componente lo tengo preparado, pero he hecho este para comprobar si un fileexist a un fichero de un cd te lo encuentra ... y no me lo encuentra.

Otro problema será despues ejecutar el exe desde el servicio, ya que como he comentado ahora mismo no me va .. por que me dice que no encuentra el fichero.

Un saludo. Gracias.
Responder Con Cita
  #4  
Antiguo 14-12-2007
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Bueno, es lógico que si no encuentra el archivo no te funcione

para ejecutar un .exe usa WinExec o ShellExecute (mira la ayuda de Delphi si no los conoces aún).

En cuanto al problema con el componente de roman, si te da ese fallo lo que tienes que hacer es restar 1 a la letra de la unidad (sí, restar).

Se haría así:

drive:=Chr(Ord(drive)-1);

Espero que con esto ya esté todo solucionado.

Saludos.
Responder Con Cita
  #5  
Antiguo 17-12-2007
mierda mierda is offline
Miembro
 
Registrado: may 2006
Posts: 129
Poder: 18
mierda Va por buen camino
Hola tio

Hola, gracias por contestar .... pero dentro de un servicio para ejecutar algo solo funciona el createprocess, los otros 2 no funcionan. Lo he leido por ahi.

Aun usando este comando no se me ejecuta lo que hay dentro del cd ya que no me lo reconoce con fileexists
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
Instalar un servicio desde delphi mierda API de Windows 6 02-03-2007 09:29:04
Iniciar e instalar servicio desde un boton! JuanErasmo API de Windows 5 25-02-2007 09:57:34
Ejecutar ServerController como Servicio en Windows Capo Internet 3 06-10-2006 22:02:56
Capturar pantalla desde un servicio del windows walrus API de Windows 4 17-08-2005 17:59:14
Iniciar servicio desde linea de comandos Sergio J. Varios 3 23-12-2004 13:48:06


La franja horaria es GMT +2. Ahora son las 05:13:20.


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