none
ClickOnceアプリで必須コンポーネントをアプリケーションと同じ場所からダウンロードしたい場合 RRS feed

  • 質問

  • 以下の設定でアプリケーションの発行を行っています。

    ・オプションで「配置プロバイダURLの除外」にチェック
    ・発行先URLはローカルPCのWEBサーバ
    ・必須コンポーネントは「アプリケーションと同じ場所からDL」
    ・必須コンポーネントは.Net3.5SP1

    必須コンポーネントとアプリ本体は問題なく発行完了し、成果物を別のWEBサーバに配置。
    配置されたURLからインストールを行おうとしたところ、必須コンポーネントのDLでエラーとなってしまう。

    インストールログは以下

    ------------

    The following properties have been set:
    Property: [AdminUser] = true {boolean}
    Property: [ProcessorArchitecture] = Intel {string}
    Property: [VersionNT] = 5.1.3 {version}
    Running checks for package 'Windows インストーラ 3.1', phase BuildList
    The following properties have been set for package 'Windows インストーラ 3.1':
    Running checks for command 'WindowsInstaller3_1\WindowsInstaller-KB893803-v2-x86.exe'
    Result of running operator 'VersionGreaterThanOrEqualTo' on property 'VersionMsi' and value '3.1': true
    Result of checks for command 'WindowsInstaller3_1\WindowsInstaller-KB893803-v2-x86.exe' is 'Bypass'
    'Windows インストーラ 3.1' RunCheck result: No Install Needed
    Running checks for package '.NET Framework 3.5 SP1', phase BuildList
    Reading value 'SP' of registry key 'HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.5\1041'
    Unable to read registry value
    Not setting value for property 'DotNet35SP'
    The following properties have been set for package '.NET Framework 3.5 SP1':
    Running checks for command 'DotNetFX35SP1\dotNetFx35setup.exe'
    Skipping ByPassIf because Property 'DotNet35SP' was not defined
    Result of running operator 'ValueEqualTo' on property 'AdminUser' and value 'false': false
    Result of running operator 'VersionLessThan' on property 'VersionNT' and value '5.1.2': false
    Result of running operator 'VersionEqualTo' on property 'VersionNT' and value '5.2.0': false
    Result of running operator 'ValueEqualTo' on property 'ProcessorArchitecture' and value 'IA64': false
    Result of checks for command 'DotNetFX35SP1\dotNetFx35setup.exe' is 'Install'
    '.NET Framework 3.5 SP1' RunCheck result: Install Needed
    EULA for components '.NET Framework 3.5 SP1' was accepted.
    Copying files to temporary directory "C:\DOCUME~1\TEI_EN~1.PRI\LOCALS~1\Temp\VSD58.tmp\"
    Downloading files to "C:\DOCUME~1\TEI_EN~1.PRI\LOCALS~1\Temp\VSD58.tmp\"
    (2010/02/16 17:13:51) Downloading 'DotNetFX35SP1\dotNetFX20\aspnet.msp' from 'http://127.0.0.1:8080/HogeApp/DotNetFX35SP1/dotNetFX20/aspnet.msp' to 'C:\DOCUME~1\TEI_EN~1.PRI\LOCALS~1\Temp\VSD58.tmp\'
    Download completed at 2010/02/16 17:13:51
    Downloading failed with HRESULT=-2146697210
    (2010/02/16 17:14:49) Downloading 'DotNetFX35SP1\dotNetFX20\aspnet.msp' from 'http://127.0.0.1:8080/HogeApp/DotNetFX35SP1/dotNetFX20/aspnet.msp' to 'C:\DOCUME~1\TEI_EN~1.PRI\LOCALS~1\Temp\VSD58.tmp\'
    Download completed at 2010/02/16 17:14:49
    Downloading failed with HRESULT=-2146697210
    (2010/02/16 17:14:50) Downloading 'DotNetFX35SP1\dotNetFX20\aspnet.msp' from 'http://127.0.0.1:8080/HogeApp/DotNetFX35SP1/dotNetFX20/aspnet.msp' to 'C:\DOCUME~1\TEI_EN~1.PRI\LOCALS~1\Temp\VSD58.tmp\'
    Download completed at 2010/02/16 17:14:50
    Downloading failed with HRESULT=-2146697210

    ------------

    必須コンポーネントのダウンロード先が発行先で指定したURLから行おうとしています。
    発行時に更新先URLが不明なため「配置プロバイダURLの除外」としましたが、この設定を行うとアプリケーションと同じ場所から必須コンポーネントをDLすることは不可能なのでしょうか?

    ちなみに必須コンポーネントのDLが不要な場合は問題なくアプリケーションのDL/インストールが行われ起動します。

    開発環境:VS2008 TeamSystem Development Edition Ver 9.0.30729.1 SP1

    以上、よろしくお願い致します。



    2010年2月16日 10:26

回答

  • 前提としてオフライン実行可能な配置の場合でしょうか。
    簡単に確認してみたかぎりでは、オンラインでのみ実行できるように配置した場合には、配布ファイルのダウンロードは正常に行えているようでした。

    オフラインで実行可能なデプロイメントはほとんど利用していないので、たいしたことは書けませんが、配置プロバイダURLの除外機能は、「どこからでもインストールできるようになる」という機能ではなく「アップデートの確認元をインストール元にあわせる」機能なので、この場合には有効ではないように思います。

    > 問題は、なぜクライアントが「http://127.0.0.1:8080/」からダウンロードしようとしているかがわかりません。

    生成された setup.exe の BASEURL が、配布オプションで設定したインストール元になっている = 127.0.0.1:8080 が設定されている、ためだと思われます。配布ウィザードで DVD を選択すると BASEURL は未設定になりますが、もしかするとこの状態でうまくいったりするかもしれませんね。
    • 回答としてマーク masy 2010年2月25日 4:28
    2010年2月18日 4:12

すべての返信

  • > Downloading failed with HRESULT=-2146697210

    これは、OJBECT_NOT_FOUND ですので、対象の配布先サーバに、http://127.0.0.1:8080/HogeApp/DotNetFX35SP1/dotNetFX20/aspnet.msp などの記載されている URL でアクセスできるファイルが存在するか、確認されてみてはどうでしょう? これらのファイルは Visual Studio をインストールしただけの状態では生成されないはずです。
    # 再配布ファイルを展開して、product.xml の PublicKey ハッシュ値を更新しなければならない…だったかな
    # Visual Studio 2008 SP1 のリリースノートに書いてあります
    2010年2月17日 3:41
  • K.Takaokaさま

    ご回答ありがとうございます。

    再配布ファイルに関してはproduct.xml の PublicKeyのハッシュ値を更新して必須コンポーネントの発行には成功しております。
    また、エラーとなっているファイルに関しても存在しています。

    上記のインストールログはクライアントPC側のログでして、クライアントが「http://127.0.0.1:8080/」のホストにアクセスしてもファイルは存在しないのは当然だと思います。
    問題は、なぜクライアントが「http://127.0.0.1:8080/」からダウンロードしようとしているかがわかりません。

    本来であれば「http://xxx.xx.xxx.xxx:8080/」からダウンロードされるべきかと思いますが、発行時に発行先URLを「http://127.0.0.1:8080/HogeApp/」としたことが原因なのかなぁと感じています。

    「配置プロバイダURLの除外」を行ったが何か関係しているのかとも思っています。

    ※xxx.xx.xxx.xxxはサーバのIPアドレス
    2010年2月17日 4:28
  • 前提としてオフライン実行可能な配置の場合でしょうか。
    簡単に確認してみたかぎりでは、オンラインでのみ実行できるように配置した場合には、配布ファイルのダウンロードは正常に行えているようでした。

    オフラインで実行可能なデプロイメントはほとんど利用していないので、たいしたことは書けませんが、配置プロバイダURLの除外機能は、「どこからでもインストールできるようになる」という機能ではなく「アップデートの確認元をインストール元にあわせる」機能なので、この場合には有効ではないように思います。

    > 問題は、なぜクライアントが「http://127.0.0.1:8080/」からダウンロードしようとしているかがわかりません。

    生成された setup.exe の BASEURL が、配布オプションで設定したインストール元になっている = 127.0.0.1:8080 が設定されている、ためだと思われます。配布ウィザードで DVD を選択すると BASEURL は未設定になりますが、もしかするとこの状態でうまくいったりするかもしれませんね。
    • 回答としてマーク masy 2010年2月25日 4:28
    2010年2月18日 4:12
  • K.Takaokaさま

    返答が遅くなりました。

    確かにどこでもインストールできるという機能ではありませんよね。
    結局のところ、「配置先プロバイダURLの除外」を行えば更新先の指定の必要はないようですが、お客様ごとに発行しなおさないとうまくいかないということでしょうか。

    というより、そういう結論に今回はすることにしました。

    いろいろご教授いただきありがとうございました。
    2010年2月25日 4:26