Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di ganesha
    Registrato dal
    Jan 2003
    Messaggi
    357

    [delphi] OpenDialog e CreateProcess

    Mi succede una cosa strana:

    ho un'applicazione dalla quale lancio un file .bat con la funzione CreateProcess.
    codice:
    fn:='prova.bat "nomefile"';
    CreateProcess(nil,PChar(fn), nil, nil, False,
      NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo);
    in questo modo funziona e il file batch viene lanciato.

    Se invece uso il componente TOpenDialog per ottenere "nomefile":
    codice:
    fn:='prova.bat';
    if OpenDialog.Execute then
      fn:=fn+' "'+OpenDialog1.FileName+'"';
    CreateProcess(nil,PChar(fn), nil, nil, False,
      NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo);
    così non funziona. il batch non viene lanciato..
    e non riesco a capire il perché

    Qualche idea?

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,466
    Il mio sospetto è che la selezione del file provochi una modifica della cartella corrente, impedendo quindi di trovare il file batch che - suppongo - si trova nella cartella dell'eseguibile.

    Io suggerirei di usare percorsi completi per tutti i riferimenti ai file esterni e vedere cosa succede.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  3. #3
    Utente di HTML.it L'avatar di ganesha
    Registrato dal
    Jan 2003
    Messaggi
    357
    bravo! era proprio per quel motivo

    come faccio allora a salvare la cartella corrente?

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,466

    Application.ExePath

    Originariamente inviato da ganesha
    come faccio allora a salvare la cartella corrente?
    Non devi salvare la cartella corrente, bensì risalire al percorso effettivo del file batch.

    Ad esempio, il percorso della tua applicazione può essere ottenuto usando la funzione ExtractFilePath e la proprietà ExePath dell'oggetto Application.

    Quindi
    codice:
      AppPath := ExtractFilePath(Application.ExePath);
    Se il file batch si trova nella cartella dell'applicazione, puoi accodare AppPath al nome del file e ottenere così il percorso assoluto.

    Il concetto di "cartella corrente" non andrebbe adottata poichè potrei benissimo eseguire la tua applicazione da una cartella differente da quella in cui si trova l'eseguibile; in tal caso, il tuo codice non funzionerebbe.

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

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

  5. #5
    Utente di HTML.it L'avatar di ganesha
    Registrato dal
    Jan 2003
    Messaggi
    357
    ho fatto così:
    siccome il file batch si trova nella cartela dell'applicazione, quando viene creato il form principale assegno ad una variabile il valore restituito da GetCurrentDir, poi prima di lanciare il batch lo assegno a SetCurrentDir.
    così mi funziona.

    grazie alka

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,466
    Originariamente inviato da ganesha
    siccome il file batch si trova nella cartela dell'applicazione, quando viene creato il form principale assegno ad una variabile il valore restituito da GetCurrentDir, poi prima di lanciare il batch lo assegno a SetCurrentDir.
    così mi funziona.
    Come ti ho già detto, se la cartella corrente però è diversa da quella che ti aspetti, il programma non funzionerà.

    Tienilo presente.

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

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

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 © 2025 vBulletin Solutions, Inc. All rights reserved.