[UWP] Desktop Bridge -체크리스트

이미 가지고 계신 응용프로그램이 다음과 같은 제약에 걸리면, 이것부터 해결하셔야 Desktop Bridge 적용이 가능합니다.

함께 하나씩 살펴 보시죠.

1. 혹시 앱이 닷넷 프레임웍 버전 4.6.1보다 아래 버전을 사용하고 있나요?
Desktop Bridge는 현재 버전 4.6.1만 지원하고 있으니, 닷넷 버전부터 올리고 오세요.
(음... 이렇단 이야기는 광범위한 사용자층을 포기해야 한다는 이야기로 들리네요.)

2. 혹시 권한 상승이 필요한 앱인가요?
스토어에서 설치 가능한 앱이 되어야 하기 때문에 권한 상승없이도 작동할 수 있어야 합니다.
(권한상승을 요구하는 앱은 권한상승을 시키는 이유가 대부분 있는데 이것 또한 조금 받아들이기 힘듭니다.)

3. 혹시 커널-모드 드라이버나 윈도우 서비스가 필요한 앱인가요?
커널-모드 드라이버나 시스템 계정으로 실행해야하는 윈도우 서비스는 지원하지 않아요. 윈도우 서비스의 경우는 백그라운드 태스크(background task)로 교체해 보세요.

4. 혹시 앱모듈이 앱 패키지 안에 함께 포함되지 않은 프로세스에 in-process로 로드되나요?
허용되지 않습니다. Shell Extension 같은 것 지원되지 않아요. 하지만 한 패키지 안에 있는 두 앱은 프로세스간 통신을 할 수 있습니다.

5. 혹시 앱이 SetDllDirectory나 AddDllDirectory를 호출하고 있는지요?
이 함수들은 현재 변환앱을 위해서는 지원되지 않습니다. 언젠가 지원하려고 작업 중입니다. 당장은 워크어라운드로 사용하는 모든 dll들을 패키지 루트(root)에 복사해 놓으세요.

6. 혹시 커스텀 Application User Model ID (AUMID)를 사용합니까?
SetCurrentProcessExplicitAppUserModelID를 호출하면, 윈도우 앱 패키지에 의해 생성된 AUMID만 이용할 수 있습니다. 커스텀 AUMID는 사용할 수 없습니다.

7. 혹시 앱이 HKEY_LOCAL_MACHINE (HKLM) 레지스트리를 수정합니까?
HKLM을 수정하기 위한 어떤 시도도 접근-거부로 실패할 것입니다. HKEY_CURRENT_USER (HKCU)를 대신 사용한다든지 HKLM을 대체할 것을 찾아야 합니다.

8. 혹시 다른 앱을 실행하기 위해 ddeexec 레지스트리 subkey를 사용하고 있나요?
app package manifest 안에 Activatable 익스텐션들에 의해 설정된 DelegateExecute 동사 처리기 중 하나를 사용하세요.

9. 혹시 다른 앱과 데이터를 공유하기 위해 AppData 폴더를 사용하고 있나요?
변환 후에는 AppData는 로컬 앱 데이터 저장소를 가리키게 됩니다. 이것은 각 UWP 앱을 위한 사적인 저장소입니다. 프로세스간 데이터 공유는 다른 방법을 찾아야 합니다.

10. 혹시 앱 설치 경로에 뭔가 파일을 씁니까?
예를들어 로그 파일을 쓸 수 있는데, 이런 게 불가능합니다. 로컬 앱 데이터 저장소 같은 다른 위치를 찾아야 합니다.

11. 혹시 앱 설치과정에 사용자 인터랙션이 필요합니까?
인스톨러는 사일런트 설치가 가능해야 합니다. 그리고 미리 설치되어야 하는 모든 항목을 책임져야 합니다.

12. 혹시 앱이 현재 작업 디렉토리(Current Working Directory)를 사용합니까?
변환 앤에서는 전처럼 Current Working Directory를 제대로 얻을 수 없을 것입니다. 앱이 제대로 기능하기 위해서는 런타임에서 Current Working Directory를 변경해 줘야 합니다.

13. 혹시 UIAccess가 필요합니까?
UAC manifest에서 requestedExecutionLevel 엘리먼트에서 UIAccess=true라고 지정했다면, 현재는 UWP로 변환할 수 없습니다.

14. 혹시 앱이 다른 프로세스가 사용할 수 있도록 COM 객체나 GAC 어셈블리를 노출합니까?

15. 혹시 지원하지 않는 방식으로 C 런타임 라이브러리를 링킹하나요?

원문: https://docs.microsoft.com/en-US/windows/uwp/porting/desktop-to-uwp-prepare