Avatar billede halden Nybegynder
01. november 2007 - 15:21 Der er 4 kommentarer og
1 løsning

Tjek om process eksisterer

Hey,
jeg har et program som kører på et vis minut interval og det virker ok.
Problemet er bare at jeg skal have lavet det sådan at hvis det allerede kører skal det ikke starte endnu en process op.
Jeg troede jeg kunne gøre dette ved at tjekke op på navnet som her:
private static void StartPsi(string fileName)
        {
            System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo();
            psi.CreateNoWindow = true;
            psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
            psi.FileName = fileName;

            Process[] processes = System.Diagnostics.Process.GetProcessesByName(fileName);

            if (processes.Length == 0)
            {
                Process process = System.Diagnostics.Process.Start(psi);
            }
        }

processes.Length er tilsyneladende 0 hver gang jeg kalder denne metode. Nogle forslag?
Avatar billede arne_v Ekspert
01. november 2007 - 15:34 #1
Proev og udskriv navnene for alle processer.

Jeg tror at processen hedder noget andet end du tror.
Avatar billede sherlock Nybegynder
01. november 2007 - 15:37 #2
Her er 2 metoder. Bl.a. den du prøver på selv.

http://www.ai.uga.edu/mc/SingleInstance.html
Avatar billede halden Nybegynder
01. november 2007 - 16:00 #3
jeg har fået det løst på følgende måde:

private static void StartPsi(string fileName, string fileNameToCheck)
        {
            System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo();
            psi.CreateNoWindow = true;
            psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
            psi.FileName = fileName;

            Process[] winProcesses = Process.GetProcesses();
            bool alreadyRunning = false;
            for (int i = 0; i < winProcesses.Length; i++)
            {
                Process current = winProcesses[i];
                try
                {
                    string moduleName = current.MainModule.ModuleName;
                    if (moduleName == fileNameToCheck)
                    {
                        alreadyRunning = true;
                    }
                }
                catch
                {
                    //empty
                }
            }

            if (!alreadyRunning)
            {
                Process process = System.Diagnostics.Process.Start(psi);
            }
        }
Avatar billede halden Nybegynder
01. november 2007 - 16:01 #4
jeg sender bare exe filens navn med ind i metoden og tjekker på det i de igangværende processor...
Avatar billede Lasse Novice
01. november 2007 - 16:37 #5
Brug et objekt af klassen Mutex istedet for.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester