Windows에서 n개의 계정이 있을 때 Shared Memory접근 이슈 질문 있습니다.

안녕하세요 Shared Memory에 접근하는 Agent앱을 개발하다가 여기저기 찾아봐도 잘 모르겠어서 질문 올려 봅니다.

세가지 앱이 있습니다. A는 WPF C#앱이고 B는 Python앱 입니다. 세번째 C앱은 'BLauncher’입니다. C# Service로 개발했습니다. C앱은 B앱을 업데이트하고 재실행 하기 위한 앱으로 B.exe가 내려가 있으면 다시 실행해 주는 앱 입니다.

2개의 PC PC1 PC2가 있습니다. PC1은 제 노트북이고 계정이 1개이고 Windows11 입니다. 두번째 PC2는 두개의 계정이 'Hello’와 'eHello’가 있고 OS는 Windows10입니다.

계정을 1개만 사용하는 PC1에서 A앱으로 Shared Memory의 "MACHINE_INFO"라는 세그먼트에 2000Byte정도의 데이터를 Write하고 Python으로 개발한 B앱에서 불러왔을 때 Shared Memory의 데이터는 잘 불러와 집니다.

하지만 B앱을 .exe로 빌드한 후 계정 2개가 있는 PC2에 Windows Service에 BLauncher인 C앱을 띄워서 실행 하면 "MACHINE_INFO"라는 세그먼트가 없다고 나옵니다.

Chat GPT에 물어보니 Session별로 Shared Memory 사용하는 공간이 다르다고 답변 해주었는데 이 부분에 대해 제가 잘 모르다 보니 맞는 말인지를 판단을 못하겠습니다.

윈도우 서비스는 System계정으로 실행이 되는데 WPF앱으로 System계정이 Access하는 Shared Memory영역에 Write할 수 있을까요?

MMF라면 이름 앞에 Global\을 붙여주면 됩니다.

2개의 좋아요

일반적이지 않은데요.
윈도우도 보안 때문에 세션을 나눈건데…

메모리를 직접 엑세스 해야 하는 이유가 없다면 asp.net core나 flask로 서버 하나 띄우고 REST로 통신하는 편이

@Chris_Shim
레거시 앱이 Shared Memory에 쓰고 있습니다. 레거시 앱은 타 팀에서 개발한 앱이라 제가 손을 댈 수가 없어서 파이썬 에이전트인 B앱을 테스트 하기 위해 A라는 WPF를 작성해서 개발하던중 막혀서 그렇습니다.

이상적인 형태는 프로세스간에 데이터 공유 할 때는 Shared Memory보다는 API로 제공 해달라고 하는게 좋겠다는 것이군요?

3개의 좋아요