Visualizzazione dei risultati da 1 a 9 su 9

Discussione: Delphi - File .exe

  1. #1

    Delphi - File .exe

    Ciao a tutti,
    è possibile [IN DELPHI] non far partire un file .exe, se non è aperto un altro file .exe?
    Mi spiego meglio:
    io ho il mio file b.exe, che da solo non deve potersi aprire, può andare solo se è stato avviato il file a.exe.
    Si può fare?
    Come?

  2. #2
    Si può fare. Ma ti chiedo scusa non ricordo bene come. Devo guardare.
    Il dubbio non è piacevole, ma la certezza è ridicola. Solo gli imbecilli son sicuri di ciò che dicono.

  3. #3
    ok... aspetto una tua risposta.
    Grazie mille.

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Una "controdomanda": i file eseguibili sono entrambi prodotti da te?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  6. #6
    Si, sono entrambi prodotti da me.

  7. #7
    Soluzione raffinata: Utilizzare le API
    Soluzione veloce: utilizzare un file di appoggio.
    Il dubbio non è piacevole, ma la certezza è ridicola. Solo gli imbecilli son sicuri di ciò che dicono.

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Originariamente inviato da pegaso22
    Si, sono entrambi prodotti da me.
    In tal caso, puoi servirti di un mutex.

    I mutex sono una specie di "semafori" usati dai processi come se giocassero a rubabandiera: attraverso un'apposita funzione API, un processo può prenderne il possesso, mentre altri processi, nell'esecuzione della stessa funzione, rimangono bloccati in attesa che la risorsa si liberi, oppure intraprendono altre azioni quando si accorgono che essa è impegnata.

    Sono elementi del sistema operativo molto utilizzati quando si lavora con thread separati, assieme ad altre strutture come le Critical Section (sezioni critiche).

    Entrambi gli strumenti sono utilizzabili ai massimi livelli in Delphi.

    Osserva il codice sorgente modello che segue relativo ad un progetto DPR:
    codice:
    program MyProgram;
    
    uses
      Windows,
      Forms,
      SysUtils,
      ...;
    
    {$R *.res}
    
    var
      MutexHandle: Cardinal;
      
    begin
      MutexHandle := CreateMutex(nil, True, 'NomeApplicazione');
      if (MutexHandle <> 0) and (GetLastError = 0) then
      begin
        try
          Application.Initialize;
          Application.Title := 'Titolo';
          Application.CreateForm(TMainForm, MainForm);
          Application.Run;
        finally
          CloseHandle(MutexHandle);
        end;
      end;
    end.
    Ovviamente, si tratta solo di uno scheletro di esempio (in base ai file del tuo progetto e alle tue esigenze, occorre alterare la forma del codice).

    La funzione CreateMutex viene usata per creare il mutex assegnandoli un nome univoco (NomeApplicazione).

    Supponendo che il codice venga inserito in entrambe le applicazioni, quando lanci la seconda ti fallirà la funzione CreateMutex poichè la prima è già in esecuzione (e ha già provveduto ad "impegnare" il mutex); il mutex viene impegnato fino al suo rilascio che avviene tramite la chiamata alla funzione API CloseHandle.

    In realtà, ci sono moltissimi modi per verificare se un programma esterno è in esecuzione: questo è quello che preferisco dal punto di vista della sicurezza (ad esempio, altri si basano sul titolo o sulla classe di appartenenza della MainForm).

    Cerca ulteriori informazioni su Internet se necessario.

    Ricorda che dal menu della Guida di Delphi hai accesso anche al file "Windows API SDK", sebbene non sia molto aggiornato; il file contiene le istruzioni per l'uso delle funzioni API incluse quelle che ti ho citato.

    Se non trovi informazioni lì, puoi sempre consultare la fonte più autorevole a riguardo: MSDN.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  9. #9
    Grazie mille, faccio un pò di prove.
    Ciao ciao.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.