XP Embedded で遊んでみた

XP embeddedを評価する機会があったので、評価版で遊んでみた。
まず、インストーラーを落としてくると、これはダウンローダーらしく、VirtualPC上のマシンからでは、ダウンロードは出来たが、インストーラの展開がうまくできなかった。
仕方ないのでホスト側にインストーラを展開して、VirtualPCにコピー。VirtualPCからインストーラーを起動した。

初めインストールがうまくいったかのように見えたが、MSDEがうまいこと起ち上がってなかったらしく、ファイルが無くてビルドがこける、アップデートも出来ないという状況でマシンを再起動したらちゃんとMSDEのアイコンが起動状態になったので、改めて、Disk2,Disk3,MUIの日本語パックを適用していった。

ここらは特に難しいこともなく終わり。

とりあえず、適当にプロジェクトを作り、ビルド。いろいろ足りないといわれるので補ってビルド。
出来たイメージをVirtualPCのHDDに入れるて、DOSからsysを転送してbootprepで起動可能にした。
結果、青画面
やっぱり。

次に起動しているマシン上で、tap.exeを実行して構成情報を取得。
インポートしてビルド。同様にVirtualPCへ。
結果、ビルドできた。が、日本語になってない。
※これは、前述のMSDEの関係でMUIがうまく入っていなかったのが原因で、ちゃんと入れたら日本語になった

次にUSBドライブからの起動に挑戦。
ufdprepというのを使うようだけど……無い。

Feature Pack 2007 というのが必要なようなので、MSからダウンロード。
無事、usbprepを入手したので、今度は、ホストPCの構成情報を抜いてイメージ作成。
結果、(1)青画面 (2)NTLDRがないぞ
ufdprepの使い方が悪かったようで、ufdprepからUSBフラッシュを初期化して、単純に出来たイメージを転送したら起動できた。

構成をインポートしただけの状態だと、200Mぐらいの小さいイメージになるので、256MのUSBフラッシュでも十分起ち上がる。ちなみにXP Proの場合、4GのCFに入れて2Gぐらい。
とりあえず、何とか使えそうなので、手配するかなぁ……

あと、参考書買わなきゃ、日本語の本は無いみたい。

Remote API 2 (RAPI2) Managed Wrapper

Windows Mobile とPCを連携しようとすると、ActiveSyncを使うことになりますが、ファイルの同期とか考えるとActiveSyncの機能だけではどうにも心許無いということで、RAPIを使おうかなと調べてました。

Native CのAPIしかないのかなぁと見ていると、RAPI2ってことでCOMのインタフェイスがありました。
どうせなら、C#で使いたいからだれかWrapper書いてないかなぁと調べてみたところ
Remote API 2 (RAPI2) Managed Wrapper
ありました。
感謝しつつゲット。

ざっと試してみたところ、とりあえず動くものの、接続、切断のイベントが飛んでこないなぁとソースを見てみると
RAPI.cs のところで、Sinkに繋いでるけどAdviseしなくても良いのかなぁと、コードを足してみたらイベント発生。
これでいいのかなぁ

"// added this code to enable an event. 2008/05/06 " のコメントのある行が追加部分(3行)

#.......................前略
        /// <summary>
        /// Creates a new instance of <c>RemoteDeviceManager</c>.
        /// </summary>
        public RemoteDeviceManager()
        {
            iSink = new RAPISink();
            iSink.DeviceConnected += new EventHandler(OnDeviceConnected);
            iSink.DeviceDisconnected += new EventHandler(OnDeviceDisconnected);
            iDesktop.Advise(iSink, out dwContext);  // added this code to enable an event.  2008/05/06
            this.Devices = new RAPIDeviceList(iDesktop);
        }
        int dwContext = 0;  // added this code to enable an event.  2008/05/06

        /// <summary>
        /// Cleans up all internal references.
        /// </summary>
        public void Dispose()
        {
            iDesktop.UnAdvise(dwContext);   // added this code to enable an event.  2008/05/06
            iSink.DeviceConnected -= OnDeviceConnected;
            iSink.DeviceDisconnected -= OnDeviceDisconnected;
            iSink = null;
            this.Devices = null;
            GC.SuppressFinalize(this);
        }
#.......................後略

Microsoft Visual Studio International Pack 1.0 ベータ1

マイクロソフトこんなものが上がってたので使ってみた。

ひらカタ変換とか、全角半角変換とかできるライブラリや、ふりがな補完ライブラリ、均等割り付けライブラリなんかが入ってる、極東用のサポートライブラリ。
C#だと、ひらカタ変換するのに、Win32API呼ばなきゃ行けないので便利かなと思って、ひらカタ変換をトライ。

string readh = KanaConverter.KatakanaToHiragana(text);

こんな感じでお手軽に変換できる。


Win32APIの、LcMapString を使って変換する場合に比べると、かなり遅い。
ベータだからかなぁ。

こっちの場合、自作のクラスを作って

string readh = Utility.MapStringExec.MapString(Utility.MapStringExec.MapFlags.HIRAGANA, text);

こんな感じで使えば、勝手はあんまり変わらない。

ベンチは取ってないけど、International Pack の方が目に見えて遅い。もっとがんばれ International Pack

……KanaToRoma変換ついてないのは何でかなぁ、まあ、わざわざ入れる機能でもないってことか。

SWIG…

結局、あんまり時間を掛けている余裕がないので同等機能をC#で書き直してお茶を濁しました。

Windowsで使う場合も、そのまんまだと安定性に疑問があるので、暇が出来たらまたチャレンジしてみる予定。