CAMBIARE DIRECTORY

giovedì 08 dicembre 2005 - 00.20

snupy71 Profilo | Newbie

AIUTOOOOOOOOOOOOO!!!

Devo lanciare un eseguibile esterno alla mia applicazione per questo ho fatto:

System.Diagnostics.Process.Start("d:\\miapath\\mio.exe")

Però l'exe deve essere eseguito dalla directory d:\miapath. Ho provato allora la cosa più semplice, per essere sicura che funzionasse: lanciare un .bat in cui ho cambio la directory e lancio il mio.exe. Funziona. Però così non mi piace perchè si apre la schifosissima finestra del prompt. Allora ho cercato qualcosa che mi permettesse di cambiare la directory prima di fare System.Diagnostics.Process.Start("d:\\miapath\\mio.exe"). Non ho trovato niente.
Se non mi dite niente voi.... non so più a che santo votarmi!!!!

Grazie 1000

Cteniza Profilo | Guru

Prova con:
Environment.CurrentDirectory = mydirectory;
oppure con
System.IO.Directory.SetCurrentDirectory(mydirectory);

snupy71 Profilo | Newbie

FUNZIONAAAAAAAAAAAAA!!!!
Grazie Cteniza, SEI UN MITO!!! Soprattutto per la velocità della risposta!!

Ma mi è venuto un dubbio: facendo così

System.IO.Directory.SetCurrentDirectory("d:\\miapath");
System.Diagnostics.Process.Start("d:\\miapath\\mio.exe");

funziona tutto, mi si apre correttamente l'altro applicativo e rimane aperto anche il mio. Ma facendo il comando che mi hai suggerito il mio applicativo non ha problemi vero ? O dopo aver lanciato l'altro devo risettare la directory corrente.

Esempio: se la mia applicazione fosse sotto d:\snupy\bin dovrei fare:

System.IO.Directory.SetCurrentDirectory("d:\\miapath");
System.Diagnostics.Process.Start("d:\\miapath\\mio.exe");
System.IO.Directory.SetCurrentDirectory("d:\\snupy\\bin");

Grazie 1000 ancora.

Roberta

Cteniza Profilo | Guru

Naturalmente cambiando la current directory dopo potresti avere bisogno di resettarla.
Niente di particolare basta semplicemente salvarsi la current directory prima di cambiarla e ripristinarla dopo.


snupy71 Profilo | Newbie

Ma sei velocissimo!!!!! Grazieeeeee!!!

Senti posso sfruttarti ancora per l'ultima cosa... giuro che è l'ultima... :-)))))

Invece di lasciare aperto il mio applicativo vorrei chiuderlo brutalmente mi sai aiutare anche qui?

Magari la domanda ti sembrerà strano ma il mio appiclativo è stato generato con un case... e io sto intervenendo direttamente nel codice. Putroppo non ho molte nozioni di programmazione... per ora....

Grazie ancora


Roberta

Cteniza Profilo | Guru

Beh, dopo l'esecuzione puoi mettere una istruzione che chiuda il programma in modo naturale come:
this.Close() oppure return (dipende tutto dal punto dove sei posizionato quando vuoi chiudere).

papini.sascha Profilo | Newbie

Hummm io avevo il tuo solito problema ... ovvero dovevo far aprire internet explorer e non sapevo come fare ... ma io ho fatto in questo modo
Public Function apriBrowser(ByVal url As String) As Integer
Dim targetDir As String
targetDir = String.Format("C:\Programmi\Internet Explorer")

processo = New Process
processo.StartInfo.WorkingDirectory = targetDir
processo.StartInfo.FileName = "iexplore.exe"
processo.StartInfo.Arguments = String.Format(url)
processo.StartInfo.CreateNoWindow = False
processo.Start()
End Function

e poi per chiudere l'applicazione in modo critico perchè non usare
Application.Exit()

meglio di questo non c'è niente !! in quanto se hai aperto x form ti chiude tutto ^^

ciao Sascha

snupy71 Profilo | Newbie

Grazie anche a te Sascha, facendo un mix tra quello che mi hai detto tu e quello che mi ha detto Cteniza sono riuscita a fare quello che volevo, ma siccome alla perfezione non c'è mai fine volevo ancora un aiutino....

Riepliogo: la mia applicazione è sotto d:\snupy\bin e l'altra è sotto d:\altrapath quindi ho fatto:

System.IO.Directory.SetCurrentDirectory("d:\\altrapath");
System.Diagnostics.Process.Start("d:\\altrapath\\altro.exe");
System.IO.Directory.SetCurrentDirectory("d:\\snupy\\bin");
Application.Exit() ;

Però tra la chiusura del mio exe e l'apertura dell'altro exe passando alcuni secondi, così l'utente si accorge dello stacco. Ho provato a mettere una pausa di 5 secondi prima di fare Application.Exit() così pensavo apparisse la videata dell'altro exe e poi si chiudesse la mia. Ma non funziona: mi sono accorta che aspetta che passino questi 5 secondi prima di lanciare altro.exe . Che devo fare?

Grazie 1000 anzi .... 3000 a questo punto



Roberta

Cteniza Profilo | Guru

Credo che in questo link tu possa trovare alcuni spunti.
http://www.akadia.com/services/dotnet_process_handling.html

Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5