WinUI 3로 간단한 압축 관리자를 하나 만들었습니다.

사실 제가 전에 한번 리눅스용 압축 프로그램을 하나 만들어보려고 했습니다(참고: 리눅스에서 주로 사용되는 닷넷 UI 프레임워크?). 그런데 그건 때려쳤습니다. 왜냐하면 리눅스를 메인으로 쓰는걸 포기했었거든요.

그런데 이번에는 윈도우가 문제네요. 저는 반디집을 쓰는데, 몇 년 전부터 업데이트할 때 마다 계속 광고가 생겨서 짜증납니다. 그렇다면 유료 버전을 쓰기에는 압축 프로그램 하나에 3만원을 쓰는게 조금 아깝습니다.

제가 반디집을 쓰는 이유는 딱 하나, ‘알아서 풀기’ 기능 때문입니다. 최신 윈도우 11에는 파일 탐색기 자체에 많이 사용되는 압축 포맷들을 푸는 기능이 들어갔지만 이 알아서 풀기 기능은 없는 것 같더군요.

그래서 직접 만들기로 했습니다. 압축 파일을 푸는 기능 자체는 SharpCompress라는 훌륭한 라이브러리가 있으니 그걸 쓰고, WinUI 3로 UI를 만드는 거죠. 물론 Bluehill.NativeCom(참고: C#과 닷넷(8+)로 윈도우 셸 확장을 만드는 방법)으로 셸 확장도 같이…

암튼 zip 파일을 푸는 기능과 알아서 풀기 우클릭 메뉴만 구현되어 있는 버전을 완성했습니다. 아직까지는 저 기능들이 답니다. 심지어 압축 파일에 뭐가 들어있는지 보여주는 기능도 없습니다. 하지만 나중에는 더 많은 기능들이 구현되겠죠. 그런데 파일들을 어떤 컨트롤로 보여줘야 할지 모르겠네요.

지금은 문제가 하나 있는데 Unpackaged 방식으로 빌드해야만 작동합니다. Windows App SDK 1.8 Preview 버전을 쓰는데, 여기에 포함된 FilePicker가 Packaged 앱에서 문제가 있는 것 같더군요. 그래서 작동하지를 않습니다. 셸 확장도 Packaged 방식으로만 작동하도록 만들어 놨는데 잘 되는지 모르겠습니다(…)

6개의 좋아요

오 저도 알아서풀기 때문에 계속쓰고있는데

3개의 좋아요

이전에 SharpCompress 와 반디집의 성능을 비교할 일이 있었는데

체감상 상당히 컸던걸로 기억합니다.

4개의 좋아요

반디집은 멀티코어를 적극적으로 활용한다고 알고 있는데 성능 차이는 어쩔 수 없다고 생각합니다.

3개의 좋아요

릴리즈 노트를 살펴보니 Microsoft.Windows.Storage.Pickers 네임스페이스에 새로운 Picker들이 추가됐네요.

WinUI 3 앱을 개발하다 보면 동일한 타입이 Microsoft.Windows.*Windows.* 네임스페이스에 동시에 선언되어 있는 경우를 동시에 볼 수 있는데요. Windows.*에 속한 것은 WinRT에서 제공하는 API고, Microsoft.Windows.*에 속한 것은 WindowsAppSDK에서 추가된 API입니다.

클론 후 코드를 수정해서 빌드해 보니까 Windows.Storage.FileOpenPicker는 정상적으로 동작하는 것으로 보입니다. 안정화 전까지 대안으로 이것을 사용할 수 있을 것 같습니다. 대신 부모 윈도우의 핸들로 FilePicker를 초기화 해주는 작업이 필요합니다.

FileOpenPicker picker = new();
IntPtr hwnd = WinRT.Interop.WindowNative.GetWindowHandle(parentWindow);
WinRT.Interop.InitializeWithWindow.Initialize(picker, hwnd);
4개의 좋아요