Newsgroup: it.comp.lang.delphi
Titolo: shell execute e percorso applicazione

ciao a tutti,
come faccio ad inserire il percorso completo della cartella in cui è
installata la mia applicazione nel comando shell execute???
ciao

 installata la mia applicazione nel comando shell execute???
ExtractFilePath(Application.ExeName)

 installata la mia applicazione nel comando shell execute???
Non ho capito.
Tu vuoi usare shellexecute per lanciare:
c:\qualchecartella\qualchesottocartella\qualchefile.exe
oppure vuoi che la esecuzione di qualchefile.exe usi come cartella
predefinita c:\qualchecaretlla\qualchesottocartella?
A.

 Non ho capito.
in pratica la mia applicazione è formata da due file .exe: il primo è quella
principale, il secondo è il sistema di backup/restore del database.
Nell'applicazione vera è propria ho messo nel menu File un collegamento al
sistema di backup con shell execute...inserendo nel percorso del file solo
il nome dell'eseguibile. Tutto funziona correttamente a patto di non usare
un collegamento dal desktop (creato da Innosetup) per lanciare
l'applicazione. Ciò è dovuto al fatto che devo poter specificare nel comando
shell execute il percorso completo dell'applicazione....
ciao!

 ha scritto nel messaggio
news:qKep9.34815$cS4.1...@news2.tin.it...

conoscevo l'esistenza di ExtractFilePath(Application.ExeName) ma...come
faccio ad integrarlo nel comando shell execute???
ciao

ma hai letto la guida di shellexecute?
A.

 ciao
Andrea


ma non ho trovato nulla riguardo i percorsi assoluti...
ciao





Ciao


 


Dunque..


 


Var


  S : String;


Begin


   // Estra il direttorio 
completo


   S := 
ExtractFilePath(ExpandFileName(ParamStr(0)));


 


   // Controlla che termini con il 
carattere '\'


   If Copy(S, Length(S), 1) <> 
'\' Then S := S + '\'


 


   // Aggiunge il programma da 
lanciare


   S := S + 
'AltroProgramma.Exe';


 


    // Esegue il programma (WExec32 e' 
dichiarata in fondo)


   WExec32(S);


End;


 


// Programma : Programma da lanciare


// Params    : 
Parametri 


Function WExec32(Const Programma : 
String;
                 
Const Params    : String);
Var
  lpCmdLine   
: Array[0..500] Of Char;
  Priority    : DWord;
  
StartupInfo : TStartupInfo;
  ProcessInfo : 
TProcessInformation;
Begin
  Result := False;


 


  // 
----------------------------------
  // Linea di comando
  // 
----------------------------------
  StrPCopy(lpCmdLine, Programma + ' ' 
+ Params);


 


  // 
----------------------------------
  // Settaggio priorita' di 
esecuzione
  // 
----------------------------------
  Priority := 
NORMAL_PRIORITY_CLASS;


  // 
----------------------------------
  // Azzeramento dati di 
ritorno
  // ----------------------------------
  
FillChar(ProcessInfo, SizeOf(ProcessInfo), 0);


 


  // 
-----------------------------------
  // Preparazione dati di 
Start-Up               

  // -----------------------------------
  
FillChar(StartupInfo, SizeOf(StartupInfo), #0);
  With StartupInfo 
Do
       
Begin
         
cb          := 
SizeOf(StartupInfo);   // 
Dimenzione
         
dwFlags     := STARTF_USESHOWWINDOW;  // Ignora 
parametri avanzati
         
wShowWindow := SW_SHOWNORMAL;         // 
Visualizzazione normale
       
End;


 


  // 
-----------------------------------------------------------
  // Se e' 
un'applicazione console -> crea una nuova console
  // 
-----------------------------------------------------------
  Priority 
:= Priority Or CREATE_NEW_CONSOLE;


 


  // 
------------------------------
  // Lancia l'applicazione
  // 
------------------------------
  Try
    If Not 
CreateProcess(nil,         // Nessun 
modulo
                         
lpCmdLine,   // Linea di comando + ' ' + 
parametri
                         
nil,         // No Security 
Attributes
                         
nil,         // No Thread Security 
Attributes
                         
FALSE,       // Nuovo 
Handle
                         
Priority,    // Parametri di 
Start-Up
                         
nil,         // Usa le Enviroment del 
chiamante
                         
nil,         // Nessuna directory di 
default
                         
StartupInfo, // punta alla struttura 
StartupInfo
                         
ProcessInfo) // punta alla struttura ProcessInfo
    
Then
      
Begin
        
ShellExecute(Application.handle, 'open', lpCmdLine, Nil, Nil, 
SW_SHOW);
        
Exit;
      End;
  
Except
    Exit;
  End;


  Result := 
True;


Exit;


Piu' di cosi' non potevo fare


 


Ciao,


David


 


Risorse per 
Webmaster:       
www.utilityweb.net
Gruppo di 
ricerca ufologico:  
www.findout.it
Guadagnare con 
email:        
www.intelliad.com/?20313316


 



Azz!
Addirittura la chiamata diretta a CreateProcess!
;-))
A.

Be se uno vuole fare le cose per bene ;-)
scherzo e' che avevo la routine già fatta e ho preferito copiarla cosi'
com'era
Bye
--


Mi da questo errore:
[Error] Unit1.pas(418): Function needs result type
alla riga:
Const Params    : String);
ciao e grazie per il codice!

Si scusa la dichiarazione esatta e'
Function WExec32(Const Programma : String;
                 Const Params    : String) : Boolean;
Ciao,
David
--
