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

Résolu
cincap Messages postés 460 Date d'inscription dimanche 5 décembre 2004 Statut Membre Dernière intervention 6 avril 2009 - 24 juil. 2008 à 09:15
cincap Messages postés 460 Date d'inscription dimanche 5 décembre 2004 Statut Membre Dernière intervention 6 avril 2009 - 24 juil. 2008 à 17:22
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

cincap Messages postés 460 Date d'inscription dimanche 5 décembre 2004 Statut Membre Dernière intervention 6 avril 2009 2
24 juil. 2008 à 13:22
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:]
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
24 juil. 2008 à 15:00
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="" />
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
24 juil. 2008 à 16:53
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 ="" />
3
cincap Messages postés 460 Date d'inscription dimanche 5 décembre 2004 Statut Membre Dernière intervention 6 avril 2009 2
24 juil. 2008 à 11:17
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:]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cincap Messages postés 460 Date d'inscription dimanche 5 décembre 2004 Statut Membre Dernière intervention 6 avril 2009 2
24 juil. 2008 à 16:20
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:]
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
24 juil. 2008 à 16:37
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="" />
0
cincap Messages postés 460 Date d'inscription dimanche 5 décembre 2004 Statut Membre Dernière intervention 6 avril 2009 2
24 juil. 2008 à 16:47
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:]
0
cincap Messages postés 460 Date d'inscription dimanche 5 décembre 2004 Statut Membre Dernière intervention 6 avril 2009 2
24 juil. 2008 à 17:22
@ 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:]
0
Rejoignez-nous