windows - Hvordan får man en Standard EXE og WinService EXE til at kommunikere med hinanden?

Indlæg af Hanne Mølgaard Plasc

Problem



Vi har en applikation, der er delestandard EXE og del WinService EXE. Standarden EXE er opstået af køre-sektionen i registreringsdatabasen og kommer til liv ved login under credentials af den bruger, der lige logget ind. WinService EXE er indstillet til Auto Run og kører derfor altid og kører som LocalSystem (hovedsagelig administrator ).


Vi har brug for disse to programmer til at dele data ved at skrive oplysninger til XML-filer.


App'en fungerer fint, når den logget bruger har adgang til den installerede mappe (C: \ Program Files \ ourApp). Standard EXE skriver dataene, og WinService EXE læser det uden problem, alt er godt.


Men når den indloggede bruger ikke har adgang til at skrive til den installerede mappe, bliver dataene fanget op i UAC Virtualization og Data Omdirigering og ender med et andet sted, og WinService finder ikke eller kan ikke læse det fra den installerede mappe.


For at omgå dette forsøgte vi at have både standard EXE og WinService EXE skrive til og læse fra\% ProgramData\%. Dette ville fungere fint, bortset fra at standardbrugere ikke har tilladelser til at skrive til\% ProgramData\%.


Vi kan ikke bruge\% LocalAppData\%, fordi den indloggede bruger, der ville være C: \ Users \ LoggedInUser \ AppData \ Local, og for winservice ville det være C: \ Users \ Administrator \ AppData \ Local.


Er der nogen plads tilbage i Vista og Win7 med UAC Virtualization aktiveret, der vil tillade både en Standard EXE kørsel med kun bruger priveleges og en WinService kører som LocalSystem at tale med hinanden. Vi forsøgte registret, men problemerne er endnu værre. Også sidst men ikke mindst. Vi har brug for dette til at arbejde med XP uden nogen forskel i kode. Betydning XP har også miljøvariabler for\% ProgramData\%,\% LocalAppData\% etc, kan det fungere i begge.

Bedste reference


To ideer:



  1. Har hver app udsat et WCF-endepunkt ved hjælp af det navngivne rør
    transport, og få dem til at snakke med hinanden via en simpel grænseflade
    efter eget valg.

  2. Brug [1] Hukommelsesmappede filer til at kommunikere som
    du var med diskfiler.