IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

CreateThread ou CreateProcess


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 107
    Points : 41
    Points
    41
    Par défaut CreateThread ou CreateProcess
    salut

    et bien je crois que ma question a été supprimée depuis la maintenance :S

    donc je vais la reposter ici

    oui donc en fait mon soucis était de créer un thread qui puisse rester ouvert après la fermeture de l'application, donc on m'a dis que je devais utiliser CreateProcess, et je me demandais donc si le process ne pouvait pas exécuter un bout de code qu'on lui spécifié, ou est-ce qu'il est obligé d'être sur l'ordinateur sous forme d'un executable ?

    en si je cherche a faire cela, c'est pour permettre à l'application de s'auto-supprimer après sa fermeture, ou bien de la redémarrer. Peut-etre y a-t-il plus simple, je ne sais pas trop.

    voila voila merci

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Pour info: contenu de la discussion originelle:

    Citation Envoyé par Shredder
    bonjour,

    dans mon application j'essaie de créer un thread, mais qui reste actif même après la fermeture de l'application.

    je ne sais pas du tout si cela est possible, car d'après ce que j'ai vu jusqu'ici les threads de l'application son automatiquement détruits quand on ferme la forme.

    enfin je voudrais savoir si il existe néanmoins une solution

    merci
    Citation Envoyé par wiztricks
    Pourquoi ne pas créer un process indépendant via "fork"?
    -W
    Citation Envoyé par Franck SORIANO
    Ce n'est pas possible avec un simple thread.

    Sous Windows, il faut lancer un nouveau process avec CreateProcess :
    http://msdn.microsoft.com/en-us/libr...25(VS.85).aspx
    Citation Envoyé par Shredder
    oui mais en créant un process, j'ouvrirais alors un executable déjà présent sur l'ordinateur, a moins que je puisse spécifier le code de ce process sans avoir a passer par un .exe.

    non?

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Beaucoup de chose sont possibles, créer un process à partir d'un bout de code, vu ce que j'ai vu sur l'écriture en mémoire d'un process par un autre, de l'injection code et autres, c'est surement possible, ... mais solution simple avant :

    En gros ce code devrait t'inspirer
    L'application se lance, cela cherche une nouvelle version, cela génère un BAT qui va faire ce qu'il faut, et le BAT à la fin s'auto-supprime (ce que je peux pas faire un EXE)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    function GetLastVersion(): Boolean;
    var
      DirMaj, ExeMaj: string;
      VersionLocale, VersionMaj: string;
      TmpIniFile: TIniFile;
      BatOp: TStringList;
      DosStr: array of Char;
      BatName: string;
    begin
      Result := False;
     
      TmpIniFile:= TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
      try
        DirMaj := TmpIniFile.ReadString('PATH', 'MAJPATH', DEFAULT_MAJPATH);
        ExeMaj := IncludeTrailingPathDelimiter(DirMaj)+ExtractFileName(Application.ExeName);
      finally
         TmpIniFile.Free();
      end;
     
      if GetFileVersion(Application.ExeName, VersionLocale) and
         GetFileVersion(ExeMaj, VersionMaj) then
      begin
         Result := CompareVersion(VersionMaj, VersionLocale) > 0;
         if Result then
         begin
           BatOp := TStringList.Create();
           try
             //BatOp.Add('@ECHO OFF');
             BatOp.Add(':LoopRename');
             BatOp.Add(Format('RENAME "%s" "%s"', [Application.ExeName, ExtractFileName(ChangeFileExt(Application.ExeName, '.'+VersionLocale))]));
             BatOp.Add(Format('IF NOT EXIST "%s" GOTO LoopRename', [ChangeFileExt(Application.ExeName, '.'+VersionLocale)]));
             BatOp.Add(':LoopDelete');
             BatOp.Add(Format('DEL "%s"', [Application.ExeName]));
             BatOp.Add(Format('IF EXIST "%s" GOTO LoopDelete', [Application.ExeName]));
             BatOp.Add(':LoopCopy');
             BatOp.Add(Format('COPY "%s" "%s"', [ExeMaj, Application.ExeName]));
             BatOp.Add(Format('IF NOT EXIST "%s" GOTO LoopCopy', [Application.ExeName]));
             BatOp.Add(Format('"%s"', [Application.ExeName]));
             BatName := Format('%s\MAJArchive.bat', [ExtractFileDir(Application.ExeName)]);
             BatOp.Add(Format('DEL "%s"', [BatName]));
             SetLength(DosStr, Length(BatOp.Text)+1);
             if CharToOem(PChar(BatOp.Text), @DosStr[0]) then
               BatOp.Text := StrPas(@DosStr[0]);
             BatOp.SaveToFile(BatName);
             ShellExecute(0, 'open', PChar(BatName), nil, PChar(ExtractFileDir(Application.ExeName)), SW_HIDE);
           finally
             BatOp.Free();
           end;
         end;
      end;
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 107
    Points : 41
    Points
    41
    Par défaut
    oué ça semble assez simple et efficace, malheureusement assez limité au niveau des fonctions, mais ça devrait faire l'affaire

    créer un process à partir d'un bout de code, vu ce que j'ai vu sur l'écriture en mémoire d'un process par un autre, de l'injection code et autres, c'est surement possible
    je n'ai pas trouvé quelque chose de semblable, mais si tu pouvais me donner un lien ça m'interesserait

Discussions similaires

  1. CreateProcess (impossible de gérer le symbole >
    Par borgirz dans le forum Windows
    Réponses: 4
    Dernier message: 03/06/2004, 10h53
  2. [CreateProcess] Comment cacher la fenêtre ?
    Par iubito dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 27/04/2004, 18h27
  3. Réponses: 2
    Dernier message: 05/04/2004, 23h06
  4. Réponses: 5
    Dernier message: 24/01/2004, 12h53
  5. CreateProcess + paramètres passé
    Par obione dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 20/03/2003, 17h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo