none
セットアッププロジェクトの「対象コンピュータの検索」について RRS feed

  • 質問

  • VS2005のセットアッププロジェクトで、A.txtというファイルがインストール先に存在するとき、B.txtをインストールするように設定をしているのですがうまく動作しないためご教示下さい。現在の設定は以下のようになります。

     

    1.「対象コンピュータの検索」→「ファイル検索の追加」を追加して以下のプロパティを設定

     FileName: A.txt

     Folder: [TARGETDIR]

     Property:FILEEXISTS1

     

    2.インストールファイルB.txtのプロパティ「Condition」の設定

     Condition: FILEEXISTS1=="A.txt"

     

    2007年11月5日 2:57

回答

  • >試してみないとわからんですけどね...

     

    VS2005 で起動条件にファイルを指定で試してみました。TARGETDIR が選択できるんですね...だめじゃんw

     

    検証手順を書いておきます。

    起動条件エディタを開き、対象コンピュータの検索から、ファイル検索を選択(名前は何でもよい)

    ファイル検索のプロパティで、Folder を [TARGETDIR]、FileName をなんか適当なファイル(何でもよい)を指定。

     

    次に起動条件を追加します。

    ここでは、Condition に、DummyProperty1 と書きます。成立しない条件ならなんでもいいわけですがw

    メッセージには、実際に確認したいプロパティを[]で囲って記述します。

    今回であれば、確認したいのは、[TARGETDIR] と、検索結果の[FILEEXISTS1]ですので、「」などでくくってからの状態でもわかるようにして、文字列をセットします。

     

    これで、ビルドして、実行します。

     

    すると、具体的に実行時にどういう情報がセットされるかが確認できます。

    あとは、ここで、いろいろと文字列をセットしなおしてみて、意図したものが検索できるようにしてあげればよいでしょう。

     

    あらかじめ指定されたファイルがこのあたりにあるはずだというのがわかっていれば、それをサーチするようにする形になります。

     

    インストーラにも独特の検索テクニックがいろいろあるので、検索したいものが何かが具体的になっていれば、それを迅速に検索する方法もある場合もあります(ない場合もある)。

    VSセットアップではかなり難しいですが...w

     

    また、VSセットアップでは多分できない(というかおそらく無理w)ですが、フォルダを検索して、それをデフォルトのインストール先(あるいは、そこに固定)という方法もあります。

    ただし、こちらは WiX かInstallShield を使うか、ビルド後のオプションでスクリプトなどを通じてかなりカスタマイズしないとだめですけどねw

    2007年11月8日 7:29

すべての返信

  • 2の比較の方法が異なっています。等値の比較は、「=」です。

    で、この場合、パスがセットされてたと思うので(プロパティの内容を確認していないので詳細不明)、FILEEXISTS1 <> "" と空ではないという比較にしないとうまくいかないと思いますよ。

     

    http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=2324701&SiteID=7

     

    に同じような質問(内容は全く違っていますが、Condition に関する質問です)がありますので、詳しくはそちらからいろいろリンクをたどってみてください。

    #ちょっとしたデバッグテクも書いてありますw

    2007年11月5日 4:35
  • #検証してたらとっちゃん様に先を越されました。

    インストールファイルB.txtのConditionに

     

    FILEEXISTS1<>NULL

     

    でお望みの通りになります。

    2007年11月5日 4:44
  • ご回答ありがとうございます。

     

    ただ、困ったことに教えて頂いた設定にしてもうまく動作してくれません。

    そこで再度質問なのですが、プロパティのTransitiveやVitalなどは特に設定する必要は無いのでしょうか?

    なにか見落としているだけだと思うのですが、、、、

     

    申し訳ありませんが、もう少しお力をお貸し下さい。

    2007年11月5日 7:54
  • あっすいませんでした。。。

    たぶん実際のTARGETDIRに空白が含まれているからだと思います。

     

    とりあえずファイル検索のFolderプロパティの

    [TARGETDIR]

    "[TARGETDIR]

    にしてみてください。

    #この指定方法で正しいか自信ないですが…

     

    追記:

    すいませんでした。

    これダメですね。。。

    なぜかFolderプロパティは固定の絶対パスでないとうまくいかないです…

    Folderは固定の絶対パスにして、Depthプロパティのをあげてしまうのはダメでしょうか。

    最悪ドライブのルートから…その場合、同じ名前のファイルがあったらあることになっちゃいますね。。。

     

    #神様、T様、解決策お願いします…

    2007年11月5日 9:06
  • 固定パスだと正常動作するのはこちらでも確認できました。

    ありがとうございます。

     

    現在セットアッププロジェクトで作成できるインストーラの機能確認をしている段階なので、「Folderプロパティに絶対パス」を入れるというのもありなのですが、どうも腑に落ちないため質問させて頂いている次第です。。。。

     

    2007年11月7日 1:51
  • 回答でなくて申し訳ありません。

     @hiro さんからの引用

    「Folderプロパティに絶対パス」を入れるというのもありなのですが、

    完全な絶対パスでなくてもDepthの値を上げれば上位フォルダのパスでOKみたいですよ。

     @hiro さんからの引用

    どうも腑に落ちないため質問させて頂いている次第です。。。。

    同意です。

    Folderプロパティに

    対応するのはどうやらmsiファイルの

    DrLocator Table

    http://msdn2.microsoft.com/en-us/library/aa368331.aspx

    のPathフィールドのようなのですがAnyPath型とあるので

    AnyPath

    http://msdn2.microsoft.com/en-us/library/aa367562.aspx

    をみると

    The path may contain properties enclosed within square brackets ([ ]).

    て書いてあります。

    これたとえば[TARGETDIR]とかでもでもOKという意味だと思います。

     

    なんでだめなんでしょうね。。。

     

    #とっちゃん様の降臨待ち。。。

    2007年11月7日 2:53
  • DrLocator などのAppSearchがらみのテーブルは、そのタイミングの問題により、ディレクトリプロパティは利用できません。

    なぜなら、初期化される前だからです。

    #TARGETDIR もまだ空の状態だと思いますよ。

     

    今日は家からなので、細かいチェックができないんで、あれなんですが...

     

    AnyPath の制約の影響を受けるです。

    が、AnyPath でディレクトリプロパティを使うには、Directory Table の初期化が終わっている(すなわちCostFinalizeが済んでいる)必要があります。

     

    通常のシーケンス順では、AppSearchの実行タイミングは起動直後なので、利用できないということになります。

    #ただし、Program Files などいくつかのシステムフォルダは使えたような気がします。

     

    試してみないとわからんですけどね...

     

    2007年11月7日 3:57
  • 元の質問者の方ではありませんが、呼んでしまったので。

    タイミングの問題ですか…

    勉強になります。

    とっちゃん様、お忙し中どうもありがとうございました。

    2007年11月7日 14:08
  • >試してみないとわからんですけどね...

     

    VS2005 で起動条件にファイルを指定で試してみました。TARGETDIR が選択できるんですね...だめじゃんw

     

    検証手順を書いておきます。

    起動条件エディタを開き、対象コンピュータの検索から、ファイル検索を選択(名前は何でもよい)

    ファイル検索のプロパティで、Folder を [TARGETDIR]、FileName をなんか適当なファイル(何でもよい)を指定。

     

    次に起動条件を追加します。

    ここでは、Condition に、DummyProperty1 と書きます。成立しない条件ならなんでもいいわけですがw

    メッセージには、実際に確認したいプロパティを[]で囲って記述します。

    今回であれば、確認したいのは、[TARGETDIR] と、検索結果の[FILEEXISTS1]ですので、「」などでくくってからの状態でもわかるようにして、文字列をセットします。

     

    これで、ビルドして、実行します。

     

    すると、具体的に実行時にどういう情報がセットされるかが確認できます。

    あとは、ここで、いろいろと文字列をセットしなおしてみて、意図したものが検索できるようにしてあげればよいでしょう。

     

    あらかじめ指定されたファイルがこのあたりにあるはずだというのがわかっていれば、それをサーチするようにする形になります。

     

    インストーラにも独特の検索テクニックがいろいろあるので、検索したいものが何かが具体的になっていれば、それを迅速に検索する方法もある場合もあります(ない場合もある)。

    VSセットアップではかなり難しいですが...w

     

    また、VSセットアップでは多分できない(というかおそらく無理w)ですが、フォルダを検索して、それをデフォルトのインストール先(あるいは、そこに固定)という方法もあります。

    ただし、こちらは WiX かInstallShield を使うか、ビルド後のオプションでスクリプトなどを通じてかなりカスタマイズしないとだめですけどねw

    2007年11月8日 7:29
  • 回答して頂きありがとうございました。

     

    デバッグ方法や検索方法のご指摘等大変参考になりました。

    このやり方では難しいということが分かっただけでも収穫です。

    今までは、間違っていることしか分からなかったのでw

     

    また何か分からないことがあったらご質問させて頂くかと思いますが

    その時はよろしくお願いいたします。

    2007年11月13日 0:45