데스크탑 앱을 Windows 10 UWP 앱으로 변환하는 Desktop App Converter

제가 처음 개발을 시작할 때 쯤에는 윈도우 애플리케이션 개발이라고 얘기하면 Visual Studio 6.0을 설치하고 MFC 를 이용한 개발이 대부분이었습니다. 그 후 10년이 넘는 동안 닷넷 시대가 시작되고 윈폼(WinForm), WPF(Windows Presentation Foundation) 가 등장했습니다. 흔히 윈도우 개발자라고 불리던 개발자들은 수많은 애플리케이션을 만들었고 여전히 만들고 있습니다. 하지만 모바일 시대로 접어들면서 관심이 많이 떨어진 것은 사실입니다. 지금은 Windows 10이 빠른속도로 업그레이드 및 설치되면서 UWP(Universal Windows Platform) 시대가 열렸고 애플리케이션이라는 이름보다는 앱이라는 이름이 자연스러워졌습니다.

오래동안 투자해서 만들어 놓은 윈도우 애플리케이션(Win32, 윈폼, WPF)을 점차 UWP 앱으로 변환하고 싶은 요구가 있습니다. 시대가 바뀐 탓도 있지만 많은 장점이 있기 때문이죠. 마이크로소프트는 이런 요구를 받아서 Centennial 이라는 프로젝트를 진행했고 이번 Build 2016에 Preview를 발표했습니다. Desktop App Converter라는 툴을 통해서 윈도우 애플리케이션을 UWP 앱으로 변환하는 방법을 살펴보겠습니다.

이글을 쓰는 현재(2016-04-18) 아직은 정식버전이 아닌 Preview 버전입니다.

사전 준비할 사항들

  1. 사전준비
  1. 다운로드
  1. 사전전검
    모든 애플리케이션이 UWP앱으로 변환되는 것은 아닙니다. Preparing your app for conversion to UWP 문서를 보고 가능한지 사전에 확인하고 필요하면 수정을 해야 합니다. 예를들어 반드시 Administrator로 실행되어야 하는 앱, 커널모드 드라이버나 윈도우 서비스는 변환할 수 없습니다.

Desktop Convertor 셋업

PowerShell을 Admin 으로 실행하여 아래 명령을 수행합니다.

 Set-ExecutionPolicy bypass
.\DesktopAppConverter.ps1 -Setup -BaseImage .\BaseImage-14316.wim

그리고 시스템 리부팅. 이렇게하면 BaseImage-14316.wim를 풀어서 가상의 PC를 C:\ProgramData\Microsoft\Windows\Images 경로에 만들어냅니다. 용량을 많이 차지하니 넉넉한 하드디스크가 필요합니다.

Desktop Convertor 실행

PowerShell을 Admin으로 실행해서 아래 명령을 수행합니다.

  .\DesktopAppConverter.ps1 -ExpandedBaseImage C:\ProgramData\Microsoft\Windows\Images\BaseImage-14316 -Installer FileZilla_3.16.1_win64-setup.exe -InstallerArguments "/S" -Destination FileZillaOutput -PackageName "FileZilla" -Publisher "CN=FileZilla" -Version 0.0.0.1 -MakeAppx -Verbose

PowerShell 이 실행되면서 변환을 위한 환경을 만들고 FileZilla_3.16.1_win64-setup.exe 파일을 /S 옵션(UI 없이 기본값으로 다음다음 넘어가면서 실행)으로 실행해서 destination 에 변환된 파일을 만듭니다. ExtensionBaseImage 의 용도는 셋업 프로그램이 하는일 (파일복사, 레지스트리 수정, system32 폴더와 같은 시스템 폴더에 쓰는 등)을 Docker Container에 하면서 모든 내용을 캡쳐해서 따로 저장하기 위함 입니다. 즉 가상 컴퓨터를 만들어서 거기에 설치를 하는 샘이죠. DesktopAppConverter.ps1 의 상세 옵션은 Desktop App Converter usage 에서 확인 할 수 있습니다.

folder

결과 폴더를 보면 -MakeAppx 옵션을 줬기 때문에 FileZilla.appx 가 생성되었고 셋업 프로그램이 생성한 파일들은 VFS 폴더에 레지스트리가 변경된 내용은 Registry.dat 에 캡쳐되어 저장 생성되었습니다. Assets 파일에는 아이콘 이미지가 기본 값으로 포함되어 있습니다.

서명

appx 파일이 UWP 앱입니다. 이걸 로컬에 설치해서 테스트해서 윈도우 스토어를 통해서 배포하게 됩니다. 테스트를 위해서는 서명을 해야 하는데 이 과정도 수동으로 하려면 알아야 할 것이 많겠지만 우선 문서 그대로 따라해보겠습니다. 여기서 사용한 MakeCert.exe , pvk2pfx.exe , signtool.exe 는 모두 Windows 10 SDK에 포함되어 있습니다. 저의 경우 위치는
C:\Program Files (x86)\Windows Kits\10\bin\x64 에 있습니다. 아래 명령어를 역시 Admin PowerShell 로 실행합니다.

 .\makecert .exe -r -h 0 -n "CN=FileZilla" -eku 1.3.6.1.5.5.7.3.3 -pe -sv C:\Users\iloh\Desktop\DesktopAppConverter\FileZilla.pvk C:\Users\iloh\Desktop\DesktopAppConverter\FileZilla.cer

(Private Key 비밀번호를 입력하게 됩니다)

 .\pvk2pfx.exe -pvk  C:\Users\iloh\Desktop\DesktopAppConverter\FileZilla.pvk -spc C:\Users\iloh\Desktop\DesktopAppConverter\FileZilla.cer -pfx  C:\Users\iloh\Desktop\DesktopAppConverter\FileZilla.pfx

여기까지 pfx 파일까지 생성되었고 이 파일을 이용해서 appx 에 서명 합니다. 이 과정은 appx 파일을 생성하는 것과 같이 여러번 수행이 되어야 하기 때문에 bat 파일을 만들어서 한번에 수행되도록 합니다. 여러번 수행 한다는 것은 아이콘을 변경하거나 AppxMenifest.xml 파일을 수정하여 앱의 설정을 바꾸는 작업을 말합니다. 아래는 appxbuild.bat 내용입니다. 첫번째 줄에서 FileZilla.appx 를 삭제하고 두번째 줄에서 FileZillaOutput 폴더의 내용으로 appx 파일을 만들고 세번째 줄에서 서명합니다.

 del FileZilla.appx
"C:\Program Files (x86)\Windows Kits\10\bin\x64\makeappx.exe" pack -d FileZillaOutput -p FileZilla.appx
"C:\Program Files (x86)\Windows Kits\10\bin\x64\signtool.exe" sign -f FileZilla.pfx -fd SHA256 -v FileZilla.appx

signtool.exe 에서 오류가 계속 발생했었습니다. 정확한 이유는 모르겠지만 검색을 해보니 uninstaller 가 관련되어 있는 것 같아서 VFS 폴더에 들어있던 uninstaller.exe 삭제후에 정상적으로 서명이 되었습니다. signtool 이 appx 패키지를 검사하다가 포멧이 맞지 않는 exe 파일을 만나서 발생한 오류 같습니다. 이 내용은 본사팀에 알려보겠습니다.

 C:\Users\iloh\Desktop\DesktopAppConverter>"C:\Program Files (x86)\Windows Kits\10\bin\x86\signtool.exe" sign -f FileZilla.pfx -fd SHA256 -v FileZilla.appx
The following certificate was selected:
    Issued to: FileZilla
    Issued by: FileZilla
    Expires:   Sun Jan 01 08:59:59 2040
    SHA1 hash: 1FD7BA9B2225A61F1A6285F8B6209851FE5DF358

Done Adding Additional Store
SignTool Error: SignedCode::Sign returned error: 0x800700C1
        %1 is not a valid Win32 application.
SignTool Error: An error occurred while attempting to sign: FileZilla.appx

Number of files successfully Signed: 0
Number of warnings: 0
Number of errors: 1

인증서 설치

appx 에 서명된 인증서를 설치 합니다. 먼저 appx 파일에서 오른쪽 클릭 후 Properties(속성)을 열어서 아래 그림처럼 찾아들어가서 Trusted People 에 설치합니다.

install_signinstall_cert

인증서 설치가 잘 되었는지 확인하려면 "Manage computer Certificates"를 실행해서 확인 합니다.

cert_confirm

이렇게 만들어진 Appx 파일을 이제 설치해서 테스트 할 수 있습니다. 설치는 PowerShell에서 Add-AppxPackage 명령을 사용합니다.

 Add-AppxPackage .\FileZilla.appx

드디어 설치가 되었네요. 잘 작동하는 것 같은데 패스워드가 틀렸는지 연결이 …

filezilla

여기까지 쉽지 않은 과정이었습니다. win32 앱 이었던 FileZilla를 UWP 앱으로 변환에 성공했습니다. 여기서 끝이 아닙니다. 이제 아이콘도 변경하고 소스코드가 있다면 UWP 기능을 추가하면서 조금더 사용자 친화적인 UWP 앱으로 만드는 것이 중요할 것 같습니다.

 

관련 문서

Convert your desktop application to a Universal Windows Platform (UWP) app

Build 2016 세션

Project Centennial: Bringing Existing Desktop Applications to the Universal Windows Platform Bringing Desktop Apps to the UWP Using Desktop App Converter