c # - System Bred vedvarende opbevaring?

Indlæg af Hanne Mølgaard Plasc

Problem



Mit program starter en proces, og jeg skal sørge for, at den dræbes, før jeg kan køre programmet igen. For at gøre dette, vil jeg gerne gemme procesens starttid i noget som en mutex, som jeg senere kunne hente og kontrollere, om en proces har et matchende navn og starttidspunkt.


Hvordan kunne jeg gøre det her? Jeg vil virkelig ikke holde noget på harddisken, der holder fast, når brugeren logger ud.


Til reference, bruger jeg C # og .NET

Bedste reference


Du vil gemme proces ID, ikke procesnavn og starttidspunkt. Det vil gøre det lettere at dræbe processen.
Du kan gemme filen i\% TMP\%, så den bliver renset, når harddiskpladsen er lav.


C # kode til at dræbe processen ser sådan ud:


    int pid = Convert.ToInt32(File.ReadAllText(pidFile));
    Process proc = Process.GetProcessById(pid);
    proc.Kill();


Du kan finde ud af\% TMP\% mappen som denne:


var tmp = Environment.GetEnvironmentVariable("TMP"); 


EDIT: PID kan genbruges, så du bliver nødt til at håndtere det også.

Andre referencer 1


Jeg er enig med rossfabricant om, at proces-id'en skal opbevares i stedet for et navn. Proces-id'er genbruges først efter en genstart, så dette bør være sikkert.


Jeg anbefaler dog ikke at bruge TMP-miljøvariablen til opbevaring, og i stedet se på Isoleret lagring. Dette ville være mere .NET orienteret med hensyn til lagring. Det ville også nedsætte den sikkerhed, der kræves for at køre din ansøgning.]]


Desværre vil både midlertidige biblioteker og isoleret lagring vedblive efter en logout, selvom du har brug for logik til at håndtere den pågældende sag. (Din app kan dog rense informationen om nedlukning, dog).


Hvis du har adgang til den proceskode, du starter, kan det være bedre at bruge noget som navngivet rør eller delt hukommelse for at registrere, om applikationen kører. Dette giver dig også en meget renere måde at lukke processen. At dræbe en proces skal være en sidste udvej - generelt ville jeg ikke bygge en ansøgning, hvor designet kræver at dræbe en proces, hvis det overhovedet kunne undgås.