none
ClickOnce配布によるインストールエラー RRS feed

  • 質問

  • ClickOnceによるアプリケーション配布を考えております。

    以下の環境において、アプリケーションのインストールに失敗してしまうのですが
    原因が分からず行き詰まり状態となってしまいました。

    なにかお知恵がある方がいましたら、ご教示ください。

    ■■■ 環境 ■■■
    サーバーOS: Windows2008 R2(64bit)
    Webサーバー: Apache2.0.54
    開発:Visual Studio 2008
          .Net Framework 3.5

    上記の環境において、アプリケーション構成ファイル(App.config)を含んだモジュールを
    配置し、インストールを行おうとすると下記のエラーが発生しインストールが行えません。

    ===================================================================
    プラットフォームのバージョン情報
        Windows             : 6.1.7601.65536 (Win32NT)
        Common Language Runtime     : 4.0.30319.18408
        System.Deployment.dll         : 4.0.30319.18408 built by: FX451RTMGREL
        clr.dll             : 4.0.30319.18408 built by: FX451RTMGREL
        dfdll.dll             : 4.0.30319.18408 built by: FX451RTMGREL
        dfshim.dll             : 4.0.31106.0 (Main.031106-0000)

    ソース
        配置の URL            : http://XXXXX/ClickOnceSample/AB/publish/ApachClickOnceB.application
                            サーバー        : Apache/2.0.54 (Win32) PHP/5.1.4 mod_aspdotnet/2.0
        アプリケーションの URL    : http://XXXXX/ClickOnceSample/AB/publish/Application%20Files/ApachClickOnceB_1_0_0_0/ApachClickOnceB.exe.manifest
                            サーバー        : Apache/2.0.54 (Win32) PHP/5.1.4 mod_aspdotnet/2.0

    ID
        配置 ID        : ApachClickOnceB.application, Version=1.0.0.0, Culture=neutral, PublicKeyToken=15be10b024df7a0d, processorArchitecture=msil
        アプリケーション ID        : ApachClickOnceB.exe, Version=1.0.0.0, Culture=neutral, PublicKeyToken=15be10b024df7a0d, processorArchitecture=msil, type=win32

    アプリケーションの概要
        * インストールできるアプリケーションです。

    エラーの概要
        以下はエラーの概要です。これらのエラーの詳細はログに一覧表示されています。
        * http://XXXXX/ClickOnceSample/AB/publish/ApachClickOnceB.application のライセンス認証により例外が発生しました。 次の失敗メッセージが検出されました:
            + ファイル ApachClickOnceB.exe.config は、マニフェストで指定されているものとは異なる処理されたハッシュを持っています。

    コンポーネント ストア トランザクションの失敗の概要
        トランザクション エラーは検出されませんでした。

    警告
        この操作中に警告は発生しませんでした。

    操作の進行状況
        * [2015/08/19 18:39:23] : http://XXXXX/ClickOnceSample/AB/publish/ApachClickOnceB.application のライセンス認証が開始されました。
        * [2015/08/19 18:39:23] : 配置マニフェストの処理は正常に完了しました。
        * [2015/08/19 18:39:23] : アプリケーションのインストールが開始されました。
        * [2015/08/19 18:39:23] : アプリケーション マニフェストの処理は正常に完了しました。
        * [2015/08/19 18:39:25] : 互換性のあるランタイム バージョン 2.0.50727 が見つかりました。
        * [2015/08/19 18:39:25] : Sentinel.v3.5Client, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=msil を使用している依存アセンブリ Sentinel.v3.5Client, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=msil を検出しています。
        * [2015/08/19 18:39:25] : System.Data.Entity, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=msil を使用している依存アセンブリ System.Data.Entity, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=msil を検出しています。
        * [2015/08/19 18:39:25] : WindowsBase, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=msil を使用している依存アセンブリ WindowsBase, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=msil を検出しています。
        * [2015/08/19 18:39:25] : System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=msil を使用している依存アセンブリ System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=msil を検出しています。
        * [2015/08/19 18:39:25] : 信頼の要求とプラットフォームの検出が完了しました。

    エラーの詳細
        この操作中に次のエラーが検出されました。
        * [2015/08/19 18:39:26] System.Deployment.Application.InvalidDeploymentException (HashValidation)
            - ファイル ApachClickOnceB.exe.config は、マニフェストで指定されているものとは異なる処理されたハッシュを持っています。
            - ソース:System.Deployment
            - スタック トレース:
                場所 System.Deployment.Application.ComponentVerifier.VerifyFileHash(String filePath, Hash hash)
                場所 System.Deployment.Application.ComponentVerifier.VerifyFileHash(String filePath, HashCollection hashCollection)
                場所 System.Deployment.Application.ComponentVerifier.VerifyComponents()
                場所 System.Deployment.Application.DownloadManager.DownloadDependencies(SubscriptionState subState, AssemblyManifest deployManifest, AssemblyManifest appManifest, Uri sourceUriBase, String targetDirectory, String group, IDownloadNotification notification, DownloadOptions options)
                場所 System.Deployment.Application.ApplicationActivator.DownloadApplication(SubscriptionState subState, ActivationDescription actDesc, Int64 transactionId, TempDirectory& downloadTemp)
                場所 System.Deployment.Application.ApplicationActivator.InstallApplication(SubscriptionState& subState, ActivationDescription actDesc)
                場所 System.Deployment.Application.ApplicationActivator.PerformDeploymentActivation(Uri activationUri, Boolean isShortcut, String textualSubId, String deploymentProviderUrlFromExtension, BrowserSettings browserSettings, String& errorPageUrl)
                場所 System.Deployment.Application.ApplicationActivator.ActivateDeploymentWorker(Object state)

    コンポーネント ストア トランザクションの詳細
        トランザクション情報はありません。
    ===================================================================

    なお、上記の環境でアプリケーション構成ファイルを含まないモジュールでは成功、また
    アプリケーション構成ファイルを含んでいても、WebサーバーをIISに変えた場合は
    正常にインストールが行えることまでは確認しております。


    フォーラム違い(Apacheが原因?)かもしれませんが、なにとぞよろしくお願いいたします。
    • 移動 星 睦美 2015年8月20日 0:31 Visual C# から
    2015年8月19日 10:03

回答

  • >しかも.configにハッシュ値ってそもそも持ってるの?という感じです。

    例えば以下を読んでいただくと理解できると思いますが、app.configは事前にハッシュ値が計算されてマニフェストに保持されており、ダウンロードされてきた際にそのハッシュ値と比較し、改ざんを防止しています。

    [ClickOnce Tips] アプリケーションの発行後に、アプリケーション設定ファイルの内容を編集するには
    http://blogs.msdn.com/b/jpvsblog/archive/2011/05/26/clickonce-tips.aspx

    ですから、サーバーにアップされた時か、クライアントにダウンロードされた時かでapp.configが変わってしまっているんじゃないかと思ったのです。よって、先の質問でエンコードが何か等を質問させていただきました。
    とりあえず、サーバーにアップした際と、ダウンロードした際に、元のapp.configと変わっていないかを確かめて見られると良いかもしれません。


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    2015年8月20日 3:15
    モデレータ
  • たとえば、サーバーへの配置に FTP を用いていて、その時に ASCII モード転送による改行コード変換が入ってしまっていた…という可能性は無いでしょうか。

    試しに、appName.exe.config.deploy の改行コードを変更してみたところ、今回のエラーを再現できました。

    しかも.configにハッシュ値ってそもそも持ってるの?という感じです。

    appName.exe.manifest ファイル内に、appName.exe や appName.exe.config に対応した <hash> タグがあります。



    2015年8月20日 4:29
  • 内容からするとアプリケーション発行後に、手で発行先のapp.configを編集するとハッシュ値(及びサイズも)かわってしまい、マニフェストの記述と相違が発生してしまい、検証エラーが出ると認識しております。こちらについては認識正しいでしょうか?

    その認識で良いと思います。よって、ClickOnceを発行する前にapp.configの編集しておくと良いという例が以下にあります。

    ClickOnce配置資材でWebサービスを利用する場合
    http://vsug.jp/tabid/63/forumid/42/postid/2666/view/topic/Default.aspx

    ちなみに、ファイルが見つからないと違うエラーが出ると思っていました。最初は何かブロックされているのかもしれないと思っていたのですが、思い込みは危険だということですね。失礼いたしました。


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    2015年8月20日 7:24
    モデレータ

すべての返信

  • IISでうまくいくのでしたら、Apacheの問題だと思います。確認ですが、以下のようにMIMEタイプは設定されているのでしょうか?

    ClickOnce on Apache
    http://software.clempaul.me.uk/articles/clickonce/


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    2015年8月20日 1:02
    モデレータ
  • >trapemiyaさん

    ご返信ありがとうございます。

    MIMEタイプの設定は行っております。

    投稿時の内容にも記載しておりますが、.configを含まないアプリケーションでしたら

    Apacheからもインストール・実行が可能なところまでは検証できております。

    上記の詳細を見ると、投稿時のエラー内容が記載されている状況です。

    2015年8月20日 1:26
  • そうでした。失礼いたしました。すみません。
    とすると、app.configのエンコーディングの問題かもしれません。app.configの1行目辺りにエンコーディングの指定があると思いますが、そこはどうなっていますでしょうか?
    (追記)
    あと一応ですが、MIMEタイプに以下が無い場合は、追加されると良いかもしれません。

    .config application/octet-stream


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    2015年8月20日 1:42
    モデレータ
  • >trapemiyaさん

    ご確認ありがとうございます。

    app.configのエンコードはutf-8となっております。

    (<?xml version="1.0" encoding="utf-8"?>)

    >あと一応ですが、MIMEタイプに以下が無い場合は、追加されると良いかもしれません。

    >.config application/octet-stream

    上記の設定も追加し試してみましたが、だめでした。。。

    エラー内容から推測するに、.exe.configのハッシュ値がことなるようなことですが

    IISからの実行では問題ないからハッシュ値が違うというようなことはないとおもうのです・・・

    しかも.configにハッシュ値ってそもそも持ってるの?という感じです。

    2015年8月20日 2:48
  • >しかも.configにハッシュ値ってそもそも持ってるの?という感じです。

    例えば以下を読んでいただくと理解できると思いますが、app.configは事前にハッシュ値が計算されてマニフェストに保持されており、ダウンロードされてきた際にそのハッシュ値と比較し、改ざんを防止しています。

    [ClickOnce Tips] アプリケーションの発行後に、アプリケーション設定ファイルの内容を編集するには
    http://blogs.msdn.com/b/jpvsblog/archive/2011/05/26/clickonce-tips.aspx

    ですから、サーバーにアップされた時か、クライアントにダウンロードされた時かでapp.configが変わってしまっているんじゃないかと思ったのです。よって、先の質問でエンコードが何か等を質問させていただきました。
    とりあえず、サーバーにアップした際と、ダウンロードした際に、元のapp.configと変わっていないかを確かめて見られると良いかもしれません。


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    2015年8月20日 3:15
    モデレータ
  • たとえば、サーバーへの配置に FTP を用いていて、その時に ASCII モード転送による改行コード変換が入ってしまっていた…という可能性は無いでしょうか。

    試しに、appName.exe.config.deploy の改行コードを変更してみたところ、今回のエラーを再現できました。

    しかも.configにハッシュ値ってそもそも持ってるの?という感じです。

    appName.exe.manifest ファイル内に、appName.exe や appName.exe.config に対応した <hash> タグがあります。



    2015年8月20日 4:29
  • >trapemiyaさん

    情報ありがとうございました。

    上記サイトに関しましては、構築の際にも参考にさせて頂いておりました。

    内容からするとアプリケーション発行後に、手で発行先のapp.configを編集するとハッシュ値(及びサイズも)かわってしまい、マニフェストの記述と相違が発生してしまい、検証エラーが出ると認識しております。こちらについては認識正しいでしょうか?

    なお、今回app.configは発行後に変更はしておらずVS上から初期で作りそのままの状態でClickOnceの発行を行っていた為、ハッシュ値に相違が発生することはないとの認識でいます。

    >サーバーにアップされた時か、クライアントにダウンロードされた時かでapp.config

    >が変わってしまっているんじゃないかと思ったのです。

    上記のコメントからピンッときたのですが、もしかしたらApacheで.configがダウンロードされず検証を行う際に、.exe.configが見つからないためにエラーがでるのでは?

    と思い立ち、再度httpd.confの内容を再確認しました。

    まず確認の前に、サーバー上へアップしてある.configへのアクセスが可能かの検証

    (直接URLで.exe.configへのアクセス)をしてみたところ、XMLが表示されずにエラーページ(Apacheでよくでるアクセスできなかった時のページ)が表示されました。


    環境設定において記述をしていなかったのですが、Apacheの環境でASP.NETも利用しようと考えており、mod_aspdotnetの導入をして左記の情報設定もhttpd.confに記述している状況でした。

    この中に

     AddHandler config ASPX ASP···

    の記述があり、こちらに引っかかってしまっているのではとおもい configを削除したところ思い通りの動作が実現できました。

    こちらの環境を全て伝えきれずにお手を煩わせてしまい、大変申し訳ありませんでした。

    また、さまざまな情報のご提供ありがとうございました。



    2015年8月20日 5:03
  • >魔界の仮面弁士さん

    検証してくださりありがとうございました。

    正常に動く(IISで)ものでそこまで検証に至っていなかった為、非常にありがたい情報でした。

    2015年8月20日 5:29
  • 内容からするとアプリケーション発行後に、手で発行先のapp.configを編集するとハッシュ値(及びサイズも)かわってしまい、マニフェストの記述と相違が発生してしまい、検証エラーが出ると認識しております。こちらについては認識正しいでしょうか?

    その認識で良いと思います。よって、ClickOnceを発行する前にapp.configの編集しておくと良いという例が以下にあります。

    ClickOnce配置資材でWebサービスを利用する場合
    http://vsug.jp/tabid/63/forumid/42/postid/2666/view/topic/Default.aspx

    ちなみに、ファイルが見つからないと違うエラーが出ると思っていました。最初は何かブロックされているのかもしれないと思っていたのですが、思い込みは危険だということですね。失礼いたしました。


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    2015年8月20日 7:24
    モデレータ