Détection si un logiciel est présent sur le PC

Résolu
Signaler
Messages postés
460
Date d'inscription
dimanche 5 décembre 2004
Statut
Membre
Dernière intervention
6 avril 2009
-
Messages postés
460
Date d'inscription
dimanche 5 décembre 2004
Statut
Membre
Dernière intervention
6 avril 2009
-
Bonjour à toutes et à tous,

J'aimerai lors d'un lancement de fichier associé à son logiciel (équivalent dblclick), obtenir un message si le logiciel n'existe pas.

Ex : l'ancement d'un fichier *.txt avec le logiciel principal Bloc-notes.

Voici mon code :

procedure TFormLancement.BVIEWClick(Sender: TObject);
var
f:string;
begin


  f:= SD2.FileName; //OpenDialog et Fichier *.txt


  ShellExecute (Handle,'Open',PChar(f),'', '',SW_SHOWMAXIMIZED) ;
 
 end;

J'ai naturellement vérifié sur le net, sans trop avoir de réponse constructive.

Si quelqu'un avait une idée.

Pour ma part, on pourrait aussi tester si le dossier de l'installation du logiciel existe, si oui exécution de l'ouverture du fichier, si non showmessage().

Merci d'avance,

@+,

Cincap

[mailto: mailto:]

8 réponses

Messages postés
460
Date d'inscription
dimanche 5 décembre 2004
Statut
Membre
Dernière intervention
6 avril 2009
2
Bon, je teste si le dossier existe dans program files plutôt que le logiciel qui peut être de plusieurs versions, si ce dossier existe il exécute l'ouverture du fichier si non un showmessage() puis un exit.

J'utilise une partie de l'excellente fonction communiquée par un membre de ce forum.

function ValiderPath(Str : String) : String;
var i   : Integer;
begin
  if Copy(Str, 1, 2) = '\\'         // Unité de réseau ...
  then RESULT := '\'                // Prefixe ...
  else RESULT := '';


  i := Pos('\\', Str);


  while i > 0 do
  begin
    Delete(Str, i, 1);
    i := Pos('\\', Str);
  end;


  RESULT := RESULT + Str;
end;

Merci à tous,

@+,

Cincap

[mailto: mailto:]
Messages postés
3827
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
16 décembre 2021
46
Salut,

aïe aïe aïe

regarde ce Snippet  j'ai fait le code exprès pour toi " la traduction hein"

 
@+
Cirec

<hr siz="" />
Messages postés
3827
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
16 décembre 2021
46
ben tu peux faire comme ceci  tout simplement:

Var aStr: String;
begin
  aStr := GetExePathFileFromExtention('Txt'
);
  if aStr <> EmptyStr then
    // le répertoire et l'application existent
  else
    // le répertoire et l'application n'existent pas

end;

 
@+
Cirec

<hr siz ="" />
Messages postés
460
Date d'inscription
dimanche 5 décembre 2004
Statut
Membre
Dernière intervention
6 avril 2009
2
Je sais que j'aurai pu faire ceci :

Var
 const Message : array[boolean] of string = ('Non','Oui');
begin
  ShowMessage(FileExists('C:\Documents and Settings\Cincap\Menu


Démarrer\Programmes\Accessoires\Bloc-notes.exe'));
end;

Mais je pense qu'il y a une autre solution au cas ou ce fichier n'est pas installé dans ce chemin.

@+,

Cincap

[mailto: mailto:]
Messages postés
460
Date d'inscription
dimanche 5 décembre 2004
Statut
Membre
Dernière intervention
6 avril 2009
2
Comme toujours, Cirec est à la hauteur, je vais tester, mais en ce qui concerne le dossier cela fonctionnera t'il, car par expérience, des logiciel installe leur *.exe dans des dossiers dont le nom est accompagné de la version.

Ex: Dossier = "Monlogiciel V 1.02" puis l'exécutable "Monlogiciel.exe"

Dans ce cas, mon application plantera si le dossier n'existe pas.

Ces remarques, sans tester ta fonction naturellement.

Je te tiens au courant.

@+,

Cincap

[mailto: mailto:]
Messages postés
3827
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
16 décembre 2021
46
peut importe ou l'application est installé à partir du moment ou elle l'est et qu'elle soit enregistrée au près de windows comme étant l'application à utiliser avec cette extension ce code trouvera le chemin et le nom de ce programme.

Par contre avec ta méthode c'est moins sûr ... si l'utilisateur décide d'installer l'application ailleurs que dans "Program Files" ... ben ... ton code ne trouvera rien

 
@+
Cirec

<hr siz="" />
Messages postés
460
Date d'inscription
dimanche 5 décembre 2004
Statut
Membre
Dernière intervention
6 avril 2009
2
Je viens de tester c'est plus que parfait, seul petit souci, avec la fonction avant, je pouvais utiliser un message d'alerte si le dossier n'était pas présent et si oui, lancer le fichier.

ex: Monlogiciel.txt dans le dossier Monlogiciel

 f:= SD2.FileName; //OpenDialog et Fichier *.txt

if not DirectoryExists('C:\Program Files\Monlogiciel\')
    then begin
    ShowMessage('Attention, Monlogiciel n''existe pas sur ce PC, le viewer est désactivé !');
    Bview.enabled := false;
    exit
    end
    else
    Bview.enabled := true;
    ShellExecute(Handle,'Open',PChar(f),'', '',SW_SHOWMAXIMIZED);

Si c'est possible et si tu as une idée on ne sait jamais.

Sinon, ta fonction est super, j'ai essayé avec d'autres extension.

@+,

Cincap
[mailto: mailto:]
Messages postés
460
Date d'inscription
dimanche 5 décembre 2004
Statut
Membre
Dernière intervention
6 avril 2009
2
@ Cirec, mais bien entendu, penser difficile on s'égare, je prends de l'âge c'est certain.

Merci encore une fois, tes lumières m'ont à nouveau aidé dans les deux sens.

Bonne journée,

@+,

Cincap

[mailto: mailto:]