OK scusate ecco il codice di controllo:
private void btnApri_Click(object sender, EventArgs e)
{
Int32 i;
const Int32 SW_RESTORE = 9;
// istanzio l'oggetto
Processo = new Process();
// nessun processo
Processo = null;
Process[] allprocess = Process.GetProcesses();
if (IdProcessoCartellaDati.HasValue)
{
try
{
for (i = 0; i < allprocess.Length; i++)
{
if (IdProcessoCartellaDati == allprocess[i].Id)
{
MessageBox.Show("Processo già presente: " + IdProcessoCartellaDati.ToString() + " - " + allprocess[i].Id.ToString());
}
}
// legge il vecchio processo
Processo = Process.GetProcessById(IdProcessoCartellaDati.Valu e);
// ripristina la finestra (dimensioni)
ShowWindow(Processo.MainWindowHandle, SW_RESTORE);
// e la porta in primo piano
BringWindowToTop(Processo.MainWindowHandle);
}
catch (ArgumentException)
{
// il processo non c'è più: NOP
}
}
if(Processo == null)
{
// istanzia il processo
Processo = new Process();
// nome del processo
Processo.StartInfo.FileName = "explorer.exe";
// la cartella da aprire
Processo.StartInfo.Arguments = "C:\\Dati\\Produzione";
// controllo di eventuali errori
Processo.StartInfo.ErrorDialog = true;
Processo.StartInfo.ErrorDialogParentHandle = Handle;
Processo.StartInfo.UseShellExecute = true;
try
{
// esegue l'apertura della cartella
Processo.Start();
// memorizza l'id del processo
IdProcessoCartellaDati = Processo.Id;
}
catch (Exception)
{
// gli errori sono gestiti da Windows
}
// rilascia le risorse
Processo.Dispose();
}
}