Windows CE (.NET) とか IoTとか

組込みWindows と IoTの話を扱います

Compact7のビルドがRenumberIconIdsで失敗する件

いよいよ当方でも Windows Embedded Compact7 の案件が始まり、いくつかの作業をRTM版で行うようになってきました。

で、手始めにVirtual CEPCのビルドを試してみることにしました。Windows Embedded Compact7をインストールしても特にCompact7の項目がスタートメニューに登録されるようなことはないのですが、以下のフォルダ

C:\Program Files\Windows Embedded Compact 7\Documentation

が作成され36本のPDFドキュメントがインストールされます。これらは
http://www.microsoft.com/windowsembedded/en-us/develop/windows-embedded-compact-7-white-papers.aspx

で公開されているものと基本的に同じものと思います(が、こちらはなぜか41本のPDFが公開されています)。

Virtual CEPCを試すにはこの中で

Getting Started with Virtual CEPC.pdf

Advanced Virtual CEPC.pdf

の2本の記事を参考にします。

普通にCompact7のOSプロジェクトを作成しビルドしていくのですが、以下の問題に遭遇しました。

1. PUBLU\Shell の sysgen中に以下の箇所でビルドエラーとなる

RenumberIconIds: File D:\WINCE700\public\shell\oak\lib\x86\retail\0411\ceshrecbin.res is up-to-date with regards to renumbered Icon IDs.
RenumberIconIds: File D:\WINCE700\public\shell\oak\lib\x86\retail\0411\ceshapi_base.res is up-to-date with regards to renumbered Icon IDs.
RenumberIconIds: File D:\WINCE700\public\shell\oak\lib\x86\retail\0411\ceshui_base.res is up-to-date with regards to renumbered Icon IDs.
D:\WINCE700\public\shell\oak\lib\x86\retail\0411\ceshapi_vgal.res: verbose: RenumberIconIds: Ignoring unsupported res type (BOOL) at offset(0x32)
RenumberIconIds: File D:\WINCE700\public\shell\oak\lib\x86\retail\0411\ceshapi_vgal.res is up-to-date with regards to renumbered Icon IDs.
RenumberIconIds: File D:\WINCE700\public\shell\oak\lib\x86\retail\0411\ceshui_vgal.res is up-to-date with regards to renumbered Icon IDs.
D:\WINCE700\public\shell\oak\lib\x86\retail\0411\ceshapi_dpi_base.res: error: RenumberIconIds: Cannot open output file
RenumberIconIds: File D:\WINCE700\public\shell\oak\lib\x86\retail\0411\ceshrecbin.res is up-to-date with regards to renumbered Icon IDs.
RenumberIconIds: File D:\WINCE700\public\shell\oak\lib\x86\retail\0411\ceshapi_base.res is up-to-date with regards to renumbered Icon IDs.
RenumberIconIds: File D:\WINCE700\public\shell\oak\lib\x86\retail\0411\ceshui_base.res is up-to-date with regards to renumbered Icon IDs.
D:\WINCE700\public\shell\oak\lib\x86\retail\0411\ceshapi_vgal.res: verbose: RenumberIconIds: Ignoring unsupported res type (BOOL) at offset(0x32)
RenumberIconIds: File D:\WINCE700\public\shell\oak\lib\x86\retail\0411\ceshapi_vgal.res is up-to-date with regards to renumbered Icon IDs.
RenumberIconIds: File D:\WINCE700\public\shell\oak\lib\x86\retail\0411\ceshui_vgal.res is up-to-date with regards to renumbered Icon IDs.
D:\WINCE700\public\shell\oak\lib\x86\retail\0411\ceshapi_dpi_base.res: error: RenumberIconIds: Cannot open output file
NMAKE : fatal error U1077: 'renumbericonids' : return code '0xd'
Stop.
NMAKE : fatal error U1077: 'D:\WINCE700\sdk\bin\i386\nmake.exe' : return code '0x2'
Stop.
SYSGEN: ERROR: error(s) in sysgen phase ( shell )

ここで問題になる RenumberIconIds というコマンドですが、このコマンドはあらかじめローカライズ済みで提供されている.resファイルのアイコンIDを調整する、という働きを行うもののようです。

ここでニュースグループ microsoft.public.windowsce.platbuilder を検索すると、回答としては "Full SYSGENするな"という答えが出てくるのですが、これはWince5.0当時の見解であり、実質毎プロジェクトでFull SysgenするようになったCompact7では回避しようがありません。

で、当方のたどり着いた答えは、ビルドツリー WINCE700の書き換え権限を確認しろ、ということです。具体的にはWINCE700以下を Everyone フルコントロールに設定したところ、問題なくビルドできるようになりました。

Compact7wce700


Windows CEでは最初にビルドツリーをインストールした際、\WINCE700\OSDesigns というフォルダは存在せず、誰かが最初にOSプロジェクトを作成した際に初めてOSDesignsフォルダが作成されます。その人がビルドを行う限り OSDesigns以下には自由にファイルが作成できるのですが、\WINCE700\PUBLIC 以下はインストールした際の書き込み権限が維持されます。CE6までの(FULL SYSGEN ではない) sysgenではOSDesigns以下にしか書き込みを行わなかったが、Compact7では必ずしもそうではなくなったため問題が発生することになると考えます。

あと、この問題はもしかしたら0411のような英語以外のリソースを使う人にしか発生しない問題である可能性もあります。

ちなみに、Windows Mobile 6以降やWindows Phone 7ではMUIビルドとなっており、Compact7でもMUIビルドを作成する機会が増えているのかも知れませんが、ここの「4. 必要なロケールのみを選択する」で紹介しているようにMUIを使用せず本当に必要な国別リソースのみをビルドするようにすると、ビルド時間やOSサイズを減らすことができます。