Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Ejecutar exe desde servicio (https://www.clubdelphi.com/foros/showthread.php?t=51406)

mierda 14-12-2007 13:29:46

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?!?!

ixMike 14-12-2007 15:26:17

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 :D

Saludos.

mierda 14-12-2007 16:59:18

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.

ixMike 14-12-2007 17:42:37

Bueno, es lógico que si no encuentra el archivo no te funcione :D

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.

mierda 17-12-2007 08:51:58

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


La franja horaria es GMT +2. Ahora son las 16:22:51.

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