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 Likes

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

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

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

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

3 Likes