Executer un programme java

Soyez le premier à donner votre avis sur cette source.

Snippet vu 10 711 fois - Téléchargée 29 fois

Contenu du snippet

Ce code permet d'executer un programme java en utilisant java.exe
Il est entièrement écrit avec les api windows pour avoir un executable de la plus petite taille possible.
Il verifie que le programme java.exe se trouve bien dans un des répertoires de la variable d'environnement path et vérifie aussi qu'un fichier .jar se trouve dans le répertoire courant.
Dans le cas contraire, un message d'erreur est affiché.
Le code fonctionne correctement sur win 2000, xp, et 2003 (sur la version 98 il faut rajouter dbghelp.dll que l'on peut trouver dans windows/system32 de win xp).

Source / Exemple :


unit UnitMain;

interface

uses
  ShellApi, Windows;

procedure main;

implementation

function GetCurrentDir(): string;
const
  SIZE: cardinal = 1024;
var
  path: string;
  l: DWORD;
begin
  SetLength(path, SIZE);
  l := GetCurrentDirectory(length(path), pchar(path));
  SetLength(path, l);
  result := path;
end;

function IncludeTrailingPathDelimiter(s: string): string;
begin
  if ((s = '') or (s[length(s)] <> '\')) then
    s := s + '\';
  result := s;
end;

function FindFile(const FileName: string): pchar;
var
  lpFindFileData: WIN32_FIND_DATA;
  hFindFile: HWND;
  cFileName: pchar;
begin
  cFileName := nil;
  hFindFile := FindFirstFile(pchar(FileName), lpFindFileData);
  if (hFindFile <> INVALID_HANDLE_VALUE) then
  begin
    cFileName := lpFindFileData.cFileName;
    FindClose(hFindFile);
  end;
  result := cFileName;
end;

function GetEnvironmentPath(): string;
const
  SIZE: cardinal = 4096;
var
  path: string;
  l: DWORD;
begin
  SetLength(path, SIZE);
  l := GetEnvironmentVariable('Path', pchar(path), length(path));
  SetLength(path, l);
  result := path;
end;

function FindExecutableImage(FileName: pchar; SymbolPath: pchar; ImageFilePath: pchar): HWND;
stdcall; external 'dbghelp.dll';

procedure erreur(const msg: string);
begin
  MessageBox(0, pchar(msg), nil, MB_OK or MB_ICONERROR or MB_APPLMODAL);
end;

procedure main();
const
  lpFile: string = 'java.exe';
  FileJar: string = '*.jar';
var
  lpParameters: string;
  ImageFilePath: array [0..1023] of char;
  FilePath: string;
  cFileName: pchar;
begin
  if (FindExecutableImage(pchar(lpFile), pchar(GetEnvironmentPath), ImageFilePath) = 0) then
  begin
    erreur(lpFile + ' n''a pas été trouvé, vérifier la variable d''environnement path.');
    exit;
  end;

  FilePath := IncludeTrailingPathDelimiter(GetCurrentDir);
  cFileName := FindFile(FilePath + FileJar);
  if (cFileName = nil) then
  begin
    erreur('Aucun fichier  ' + FileJar + ' n''a été trouvé dans le répertoire courant');
    exit;
  end;

  lpParameters := '-jar ' + FilePath + cFileName;
  ShellExecute(0, 'open', pchar(lpFile), pchar(lpParameters), nil, 0);
end;

end.

Conclusion :


Il manque encore le test lorsque java.exe se trouve dans le même répertoire que le fichier jar mais j'ai préféré ne pas le rajouter.

A voir également

Ajouter un commentaire

Commentaire

Messages postés
22
Date d'inscription
jeudi 22 mai 2003
Statut
Membre
Dernière intervention
29 mai 2008

Bonjour Mouffi j'ai besoin de ton code il ne me lance pas l'applet aucun message d'erreur mais rien ne se passe
Help me please
merçi pour la réponse

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.