c # - hvordan man dræber processen i Windows-CE?

Indlæg af Hanne Mølgaard Plasc

Problem



Hvordan kan jeg dræbe processen Windows \ MyProcc.exe fra min terminal (Windows-CE 5.0) ved hjælp af C # -koden?

Bedste reference


Først finder du Processen ved at give det løberens navn og dræbe det. Brug System.Diagnostics namespace.


Process[] Prs = Process.GetProcessesById(RunninExe);
if (Prs.Length > 0)
{
      foreach (Process Prss in Prs)
      {
          Prss.Kill();
      }
}

Andre referencer 1


Svaret er, at du skal bruge API'erne til værktøjshjælp. Der er et komplet eksempel på MSDN, der omfatter opregning af processer og dræbte en udvalgt. [5]

Andre referencer 2


Et kodeprojekt gør præcis det, du leder efter.
Jeg fandt denne klasse meget nyttig i drabsprocesser i CE.


http://www.codeproject.com/Articles/36841/Compact-Framework-Process-class-that-supports-full[6]


    ProcessInfo[] list = ProcessCE.GetProcesses();

    foreach (ProcessInfo pinfo in list)
    {
        if (pinfo.FullPath.EndsWith("MyExe.exe"))
            pinfo.Kill();
    }

Andre referencer 3


Når du har fundet din proces, kan du ringe til Kill kommandoen.


det er i System.Diagnostics og understøttes også i .NET Compact Framework, se her:


Process.Kill Method [7]


Desværre ligner det Process.GetProcess virker ikke i .NET CF, så du skal bruge en anden måde til at finde din proces, før du dræber den. Der er også artikler om dette:


Kompakt Framework Process klasse, der understøtter fuldt specificerede filstier [8]

Andre referencer 4


Mens Compact Framework ikke giver dig en indfødt måde at liste alle processer på, er det stadig nemt at håndtere processer, du har oprettet.


Når du bruger Process.Start (navn, argumenter) , får du kun en boolean tilbage.
Dette skyldes, at denne funktion er en fælles funktion, der kun skal bruges, når du opretter en proces og derefter ikke bekymrer dig om det. Det siger bare om det skabte det eller ej.


Hvad du virkelig vil have, er at få en kopi af procesbeskrivelsen, når du starter din eksekverbare, og det betyder, at du skal oprette en ny instans af Process og derefter bruge metoderne i det tilfælde at starte din eksekverbare.


Så lav en ny forekomst af Process - kald det P . Dette er nu effektivt en procesbeskrivelse - men det er endnu ikke forbundet med en proces.


Du vil opdage, at P udsætter mange flere attributter.


Angiv dit eksekverbare navn og argumenter (hvis du har nogen) i
P.StartInfo.FileName og P.StartInfo.Arguments
og nu ringe
P.Start ()


Hvis det returnerer True, sætter processen ID'et i P.Id til dig og opretholder et live link til din proces.


Værdierne i P.Responding P.HasExited og P.ExitCode fortæller dig, om det stadig kører, og hvis ikke, hvordan det sluttede og Du kan bruge parameterløs funktionen P.Kill () for at afslutte den, når du 'får fat i det', fordi det afsluttes processen i forbindelse med beskrivelsen.


Du skal blot oprette en ny forekomst af Proces for hver proces, du vil administrere, starte den via instantiberi variablen i stedet for den generiske delte funktion Process.Start () og gem denne som dit link til processen.


Hvis du kun holder værdien af ​​ P.Id , kan du stadig bruge den delte funktion Process.Kill (Id) for at afslutte den, og du kan bruge Process. GetProcessById () for at få en henvisning til forekomsten af ​​beskrivelsen, der refererer til den.


Dette skal fungere på ethvert sprog.


Process -strukturen indeholder også noget, der hedder MainWindowHandle , som ligner, at det er håndtaget til oprettelsesopgaven. Jeg har aldrig kontrolleret for at se om den matcher, men det bliver populeret.


Så hvis du vil dræbe 'Windows \ MyProcc.exe', er det nemt, forudsat at det virkelig er 'din proces', fordi du kan oprette den på en måde, der giver dig sit Id og Descriptor tilbage.


Hvis 'Windows \ MyProcc.exe' virkelig er 'Windows \ Someone-elses-Procc.exe', så er det ikke så nemt, fordi du har brug for at kende id og der er ingen simpel måde at få det med, medmindre det er ' s din.


Håber dette hjælper.