14. august 2006 - 20:21Der er
10 kommentarer og 1 løsning
Sende besked fra én instans af .exe til en anden
Jeg har et lidt pudsigt problem. Jeg har lavet et program som ligger sig i tray og kører. Når så brugeren eventuelt vil starte endnu et eksemplar af samme program, vil jeg gerne at det allerede kørende program starter en ny tråd op med endnu en instans af programmet, fremfor at der skal startes en helt ny proces op med tilhørende garbage collector osv.
Mit problem er hvordan jeg sendes besked fra den nyligt startede instans af programmet til den allerede kørende, så den der kører kan starte en ny tråd, og den nyligt startede kan lukke sig selv ned igen.
Det skal lige nævnes at programmet ikke arver fra WinForm men istedet ApplicationContext, så det udelukkende kører i Tray. Jeg kan derfor ikke snuppe window handlet og bare sende en message via SendMessage eller PostMessage til hovedvinduet.
Jeg har tænkt på at sætte det første instans op som TCP server, men jeg vil helst ikke bruge ressourcer på det, hvis nu brugeren ikke starter flere instanser op.
Jeg har ligeså tænkt på named pipes, men igen er jeg ret sikker på at "server" delen så skal bruge ressourcer på at stå og lytte, hvilket jeg gerne vil undgå.
Ligeså må det ikke være en løsning der involverer et delay (f.eks. noget fusk med at skrive til en fil, hvor første instans af programmet så tjekker på filen)
Det jeg søger er altså en løsning, der ikke bruger nogle nævneværdige ressourcer på "server" delen (dvs. den første instans man starter op). Om det koster lidt ressourcer når der skal startes ny tråd osv. er ligegyldigt, da det jo kun er en kort periode.
Håber problemet er ordentligt beskrevet, ellers må i bede mig uddybe :)
Du nævner selv det med en TCP server, men istedet spå kig på en IPC server, det er hurtigere og til Interprocess Kommunikation (Dvs mellem processer på samme maskine)... Men det kræver naturligvis stadig resourcer... Men det tror jeg desvære ikke du kommer uden om, og at have et socket eller lignende stående og lytte, er som regel noget der tager minimale resourcer...
dr chaos > Jeg vil netop gerne have at der kan køre flere udgaver af programmet, det skal bare foregå i samme proces, for at undgå at have mange garbage collectors mm. kørende (.Net starter 6 tråde op ved siden af den ene tråd mit program bruger)
md craig > Det har du nok desværre ret i, men jeg havde ikke hørt om IPC server, så det snupper jeg lige et kig på :)
Hmmm den har vidst været åben længe nok den her, IPC server var desværre heller ikke en løsning, så jeg må nok bare undvære. Beklager den lange svartid.
Undskyld den lange svartid (igen). Hvis jeg skal være helt ærlig synes jeg ikke jeg kunne finde ret meget om IPC server.
Er det noget der findes i .Net frameworket og kan du evt. smide et link til det ? Så kan jeg lige åbne et andet spørgsmål så du kan få pointene, hvis det er.
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.