Avatar billede nubi19 Nybegynder
14. august 2006 - 20:21 Der 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 :)
Avatar billede mcgoat Nybegynder
14. august 2006 - 20:55 #1
kigger lige med :)
Avatar billede dr_chaos Nybegynder
15. august 2006 - 09:29 #2
Vil det ikke være nemmere at bare sørge for at kun en instans af programmet kan startes ?
Avatar billede md_craig Nybegynder
15. august 2006 - 10:20 #3
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...
Avatar billede nubi19 Nybegynder
15. august 2006 - 18:59 #4
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å :)
Avatar billede nubi19 Nybegynder
19. oktober 2006 - 20:54 #5
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.
Avatar billede md_craig Nybegynder
23. oktober 2006 - 18:52 #6
Øhhhmmm... må man spørge hvad der gjorde det ikke var en løsning?...

IPC er netop til den slags kommunikation jo, så det undre mig lidt du ikke kan bruge det... o_O... samtidig er det uhyre nemt...
Avatar billede nubi19 Nybegynder
25. november 2006 - 22:11 #7
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.
Avatar billede md_craig Nybegynder
26. november 2006 - 11:52 #8
Kommer foresten an på hvad version af .NET du arbejder på, IPC er nyt i 2.0...
og ligger under:

System.Runtime.Remoting.Channels.Ipc

Hvis du kører 1.1 så er "alm." remoting not nemmest at tage fat i...
(TCP/IP, Binary)
Avatar billede nubi19 Nybegynder
26. november 2006 - 18:47 #9
Jeg kører 2.0 så det er helt fint, har også fundet det på msdn nu :)

Skal jeg oprette en anden tråd så du kan få pointene, eller kender du en smartere måde at gøre det på ? :)
Avatar billede md_craig Nybegynder
26. november 2006 - 23:54 #10
Nej det går nok... jeg samler ikke på point...

Det undrede mig skam bare at du ikke kan bruge IPC, netop fordi jeg selv bruger det meget ofte i forbindelse med styring af services...
Avatar billede nubi19 Nybegynder
29. november 2006 - 20:42 #11
Jamen så siger jeg endnu engang mange tak :)
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
Kurser inden for grundlæggende programmering

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