Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di from15
    Registrato dal
    Feb 2008
    Messaggi
    34

    [c#] Problema avvio processo da codice

    Salve a tutti, vi espongo il mio problema: ho un'applicativo scritto in c# che tra le varie funzioni ha un bottone che se premuto apre un'istanza di explorer.exe e visualizza il contenuto di una cartella.
    Il mio problema riguarda il fattoche se ho solo l'applicativo che gira senza altri programmi, l'apertura della finestra va a buon fine e se continuo a premere sul pulsante mi visualizza sempre la stessa,finestra poichè ho effettuato i controlli per non aprirne più di una. Se invece ho un'istanza di explore.exe gia aperta da parte dell'utente sulla medesima cartella che il mio bottone andrà ad aprire, alla pressione del bottone windows mi apre un'altra finestra di explorer e se premo nuovamente me ne apre un'altra e così via...
    Qualcuno ha qualche suggerimento da dirmi o conosce questo comportamento?
    Per la cronaca, programma scritto in c# VS2008 sp1 e il sistema operativo e Vista SP1.
    Grazie ciao ciao.

  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    se non fai vedere come fai i controlli per non aprirne più di una non possiamo rispondere alla tua domanda

  3. #3
    Utente di HTML.it L'avatar di from15
    Registrato dal
    Feb 2008
    Messaggi
    34
    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();

    }
    }

  4. #4
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    La cosa sembra funzionante.. hai provato ad eseguirlo in debug passo per passo nella situazione in cui si verifica il problema? Controllando eventualmente i valore degli id

  5. #5
    Utente di HTML.it L'avatar di from15
    Registrato dal
    Feb 2008
    Messaggi
    34
    Certo che funziona, se non hai già aperto la cartella "C:\\Dati\\Produzione" però!!
    Ripeto: sotto Vista 32 o 64 si comporta così:

    Con già aperta la cartella me ne apre un'altra e un'altra ancora tutte le volte che premo il bottone.
    Se non l'ho aperta me ne apre una sola ed è sempre quella!

    Sotto Xp il comportamente è invece quello che si vuole, cioè anche se ho già aperto la cartella prima di premere il bottone, alla pressione del bottone si riapre quella già aperta in modo "manuale".

    Forse non mi ero spiegato bene, chiedo scusa!!

  6. #6
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    ok avevo inteso.. infatti ti ho suggerito di fare debug paso a passo per vedere se gli id dei processi cambiano.. sotto vista potrebbe esserci una limitazione o un utilizzo differente

  7. #7
    Utente di HTML.it L'avatar di from15
    Registrato dal
    Feb 2008
    Messaggi
    34
    Quando apro la cartella per la prima volta, dopo ho sempre gli id uguali e questo mi impedisce di crearne una nuova.
    Mentre se lascio aperta la finestra di explorer sulla cartella, chiudo il programma, lo riapro e premo il bottone tutte le volte ho un'id diverso è per questo che me ne apre una ad ogni evento di pressione del bottone.

    Mi cadono le braccia...ah xp che bel sistema!!!

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.