none
CABファイル作成時の同一ファイル名の取り扱いについて RRS feed

  • 質問

  • 【環境】Visual Studio 2005


    お世話になります。

    以下のように違うフォルダにある同じ名前のファイルを、
    それぞれ別の場所にインストールするように設定してCABファイルを作成しました。

     D:\テスト\ja\hellow.wav → \wave\ja\hellow.wav
     D:\テスト\en\hellow.wav → \wave\en\hellow.wav

    しかし、このCABファイルでPDAにインストールを行ったところ、
    2つのファイルが同じものになってしまいました。
    (今回の場合はどちらもD:\テスト\ja\hellow.wavのものになってました。)


    そこで、どの段階で2つのファイルが同じものになったのか調べるために
    CABファイルを解凍して中身をみてみました。

    そうすると、CABファイル内ですでに2つのファイルが同じものになっていました。

    ということは、CABファイル作成時点でソースファイルが正しく認識されていないというなので、
    CABプロジェクトで両方のファイルのSourcePathを確認しましたが、
    ちゃんとそれぞれのファイルを指定していました。

    となると、一体何が原因なのでしょう?

    この問題の原因、そして解決策をご存知の方がいたら教えていただけないでしょうか。
    よろしくお願いいたします。

     

    ちなみに、ソースファイル名を別々のものにしてCABファイルを作成したら、
    正常にインストールされました。
    これも1つの解決策なのですが、
    できればファイル名を変更しないで解決できる方法が知りたいです。

    2007年1月14日 6:35

回答

  • >[SourceDisksFiles]
    >"hellow.wav"=1
    >"hellow.wav"=2

    多分、原因はここでしょうね。.inf ファイルは .ini ファイルと同じように
    処理されるでしょうから、同じセクション内に同じ項目名が現れている
    為にうまく動作しないのでしょう。


    ■対策其の壱

    元のファイル名を変更し、インストール時に元の名前に戻す。

    >[Files.Common1]
    >"hellow.wav","hellow.wav",,0
    >
    >[Files.Common2]
    >"hellow.wav","hellow.wav",,0

    インストール時に↑ここの情報を元にファイルがコピーされるハズですので
    ここを弄ればコピーとともにファイル名が変更される(元に戻せる)ハズです。

    # 最初のファイル名がコピー先のファイル名で、二つ目のファイル名が
    # コピー元のファイル名になっています。


    >また、もしこれを修正した場合、VSを使ってCABファイルを作成するにはどうすればいいのでしょうか。

    ごめん、VS2005とか使ったことがないんでそのへんは知らね。


    ■対策其の弐

    自分でCABファイルを作成する。

    ...CABファイルの作成は cabarc コマンドでも使えば簡単にできるのですが、
    多分、CABファイルが展開される際にディレクトリ情報を無視してフラットに
    展開されるなどしてうまく機能しない気がします。


    # う~ん、結局の所、制限事項ってことですかねぇ。

    2007年1月17日 13:44
  • こんにちは。

    見落としていました・・・。
    たぶんこれです。

    Smart Device CAB Project includes wrong localized resources

    次回のWindows Mobile SDKアップデートで対応、とか見かけた気がします。

    対策は道化師さんのレス通り、INFを書き換えてやるといいかと。
    問題のファイルのリネーム、CabWiz、リネームの戻しをバッチファイルにしておけば、見かけ上期待通りに動作するCabファイルの作成を自動化できます。
    2007年1月18日 3:09

すべての返信

  • >そうすると、CABファイル内ですでに2つのファイルが同じものになっていました。

    どういうふうにそのCABファイルを作ってんのか知らないけど、
    ひとつのCABファイル内に同名のファイルを複数同居させる(=ディレクトリ情報を保持させる)方法なら
    手前味噌でなんだけど、↓このへんでも参考にしてくだされ。

    http://www.trickpalace.net/windows/installer/

    2007年1月16日 13:49
  • 道化師さん、アドバイスありがとうございます。


    私はVS2005でCABを作成しています。

    スマートデバイスCABプロジェクトを追加し、
    そこにインストールするものを入れていって、ビルドしてます。

    そうすると、VSが自動的に以下のような設定ファイルを作って、
    CABファイルを作成してくれます。

    *** infファイル内容 **********************
    [Version]
    Signature="$Windows NT$"
    Provider="hogehoge"
    CESignature="$Windows CE$"

    [CEStrings]
    AppName="CabTest"
    InstallDir=%CE1%\%AppName%

    [Strings]
    Manufacturer="hogehoge"

    [CEDevice]
    VersionMin=4.0
    VersionMax=6.99
    BuildMax=0xE0000000

    [DefaultInstall]
    CEShortcuts=Shortcuts
    AddReg=RegKeys
    CopyFiles=Files.Common1,Files.Common2

    [SourceDisksNames]
    1=,"Common1",,"D:\テスト\en\"
    2=,"Common2",,"D:\テスト\ja\"

    [SourceDisksFiles]
    "hellow.wav"=1
    "hellow.wav"=2

    [DestinationDirs]
    Shortcuts=0,%CE2%\Start Menu
    Files.Common1=0,"%CE1%\wave\en"
    Files.Common2=0,"%CE1%\wave\ja"

    [Files.Common1]
    "hellow.wav","hellow.wav",,0

    [Files.Common2]
    "hellow.wav","hellow.wav",,0
    *******************************************

    これを見ると、ソースファイルはちゃんと別のものが指定されているように見えるのですが、
    できたCABファイルの中身は2つのファイルが同じものになってしまいます。

    このinfファイルでおかしなところがあるのでしょうか。
    また、もしこれを修正した場合、VSを使ってCABファイルを作成するにはどうすればいいのでしょうか。
    それとも、それは無理で自分でCABファイルを作成しなければならないのでしょか。

    よろしくお願いいたします。

    2007年1月17日 4:34
  • >[SourceDisksFiles]
    >"hellow.wav"=1
    >"hellow.wav"=2

    多分、原因はここでしょうね。.inf ファイルは .ini ファイルと同じように
    処理されるでしょうから、同じセクション内に同じ項目名が現れている
    為にうまく動作しないのでしょう。


    ■対策其の壱

    元のファイル名を変更し、インストール時に元の名前に戻す。

    >[Files.Common1]
    >"hellow.wav","hellow.wav",,0
    >
    >[Files.Common2]
    >"hellow.wav","hellow.wav",,0

    インストール時に↑ここの情報を元にファイルがコピーされるハズですので
    ここを弄ればコピーとともにファイル名が変更される(元に戻せる)ハズです。

    # 最初のファイル名がコピー先のファイル名で、二つ目のファイル名が
    # コピー元のファイル名になっています。


    >また、もしこれを修正した場合、VSを使ってCABファイルを作成するにはどうすればいいのでしょうか。

    ごめん、VS2005とか使ったことがないんでそのへんは知らね。


    ■対策其の弐

    自分でCABファイルを作成する。

    ...CABファイルの作成は cabarc コマンドでも使えば簡単にできるのですが、
    多分、CABファイルが展開される際にディレクトリ情報を無視してフラットに
    展開されるなどしてうまく機能しない気がします。


    # う~ん、結局の所、制限事項ってことですかねぇ。

    2007年1月17日 13:44
  • 道化師さん、詳しい解説ありがとうございます。


    >[SourceDisksFiles]
    >"hellow.wav"=1
    >"hellow.wav"=2

    なるほど。これが原因だったのですね。
    上から処理されて、2の方(SourceDisksNamesで2に指定されているディレクトリのもの)が
    hellow.wavとして認識されてしまってるのですね。
    たしかにCABファイルの中身はどっちもjaのもの(SourceDisksNamesで2になってる)になってました。

    こうなると、VS2005を使った場合はもとのファイル名が同じではうまく作れないみたいですね。


    今は対策1の方で対応しています。
    もとのファイル名を別にすればVS2005を使ってちゃんとしたCABファイルが作れます。

    でも、ファイル名を同じにするためにディレクトリ分けてるので、
    なんだかなぁという感じです。

    2007年1月18日 0:35
  • こんにちは。

    見落としていました・・・。
    たぶんこれです。

    Smart Device CAB Project includes wrong localized resources

    次回のWindows Mobile SDKアップデートで対応、とか見かけた気がします。

    対策は道化師さんのレス通り、INFを書き換えてやるといいかと。
    問題のファイルのリネーム、CabWiz、リネームの戻しをバッチファイルにしておけば、見かけ上期待通りに動作するCabファイルの作成を自動化できます。
    2007年1月18日 3:09
  • Always29さん、ありがとうございます。

    アップデートで対応してもらえるとうれしいです。
    次回のアップデートを楽しみに待つことにします。

    2007年1月18日 4:28