Win32 VMのINIファイルでイメージを指定する場合の制限、というか不具合

問題の説明

http://wiki.squeak.org/squeak/3274 にあるように、

[Global]
IniFile="C:\OtherLocation\imagefile.image"

のようにイメージファイルの場所を指定することができます。
しかし、Squeaklandのインストーラでインストールした後このカスタマイズを行った場合、*.prや*.imageをダブルクリックして起動しようとすると、エラーになります。

原因

Squeaklandインストーラは、ファイルを開くときのコマンド定義をレジストリに登録します。

HKCR\Squeak.Project\shell\open\command=
  "C:\Program Files\squeak\Plugin\Squeak.exe" "C:\Prorgram Files\squeak\plugin\squeakplugin.image" "%1"
HKCR\Squeak.Image\shell\open\command=
  "C:\Program Files\squeak\Plugin\Squeak.exe" "%1"

つまり、コマンドライン引数の1つめは必ずイメージファイル名を渡します。

しかし、Squeak現在の3.7.1VMのソースコード(sqWin32Arg.cのparseGenericArgs())では、INIファイルでVMを指定している場合にはコマンドライン引数にイメージファイルを指定しない前提となっており、イメージファイルが渡されてしまうと、それをプロジェクトとしてロードしようとしてエラーになります。

回避策

レジストリ設定を

HKCR\Squeak.Project\shell\open\command=
  "C:\Program Files\squeak\Plugin\Squeak.exe" "%1"

のように変更すると、INIファイルでイメージを指定しても *.prからsqueakを起動できます。
ただ、*.imageを正しく開けるように回避することはできないですね。

Vista対応でイメージの場所を変更するのにINIファイルを使っていて、この文書化されていない動作にハマってしまい、時間を浪費してしまいました。最終的に、回避策が不要となるようコマンドライン解釈のコードを修正しました。