none
ClickOnceのダウンローダーの呼び出しについて RRS feed

  • 質問

  • _kimuraと申します。

    会社の業務で、C#を利用したアプリケーション開発を
    開発を行っており、アプリケーションの発行にClickOnceを利用しています。
    ※「アプリケーションはオンラインでのみ実行可能」のチェックを付けて発行しています。

    弊社では、ClickOnceで配置したアプリケーションから別の
    ClickOnceで配置したアプリケーションを呼びだすことを考えております。

    その際の方法としてはどのようなものがあるでしょうか。
    また、私が調べた範囲では、次の2つが見当たったのですが、
    詳細についてご存知の方がいらっしゃいましたら、教えていただけますでしょうか。

    1.Internet Explorer を利用してダウンロード
     iexplore.exe の起動スイッチに URL を指定して起動
     
     この際、ダウンロードの完了、成功、及び失敗等の結果を取得することは可能でしょうか。


    2.dfshim.dllのShOpenVerbApplicationを利用してダウンロード
     rundll32.exe 経由でdllないのモジュールを呼び出してダウンロード

     dfshim.dll(ShOpenVerbApplication)に関する資料が見当たらなかったため、
     モジュールのパラメータの内容等の詳細をご存知でしたら、お教え頂けますでしょうか。

    2012年2月8日 7:09

回答

  • 2 の方法は、URL ではなくファイルパスを指定しての実行が前提として設計されています。URL を指定して起動することはできますが、パラメータを渡すことができません。

    パラメータを与えたい場合には、1 の方法を使用されるか、appref-ms を作成して verb=open で Process.Start 等を実行するとよいでしょう。

    おそらく、どの方法を使用した場合でも、ダウンロードの成功やアプリケーションのインストール・実行を確認することはできません。

    • 回答としてマーク _kimura 2012年2月8日 10:35
    2012年2月8日 8:01
  • dfshim.dllとしては、URL(パラメータ付き)についても対応していると言うことなのでしょうか。

    正式なドキュメントはおそらくないので、正確なところはわかりませんが、おそらく rundll32.exe 側のコマンドライン分析の都合だと思われます。

    ちなみに、apprefs-ms を直接起動する場合は、dfshim.dll の ShOpenVerbShortcut API を呼び出すようになっており、固定のパラメータを appref-ms に記述したり、動的なパラメータを | 区切りで渡すことができるようになっているようです。(こちらもドキュメントとかはないので、自己責任の範囲になるかと思います)

    > 1. 2. 3. 4...

    普通に呼び出すなら、P/Invoke の定義だけして終わりなきがします。

    • 回答としてマーク _kimura 2012年2月9日 1:03
    2012年2月8日 11:54

すべての返信

  • 2 の方法は、URL ではなくファイルパスを指定しての実行が前提として設計されています。URL を指定して起動することはできますが、パラメータを渡すことができません。

    パラメータを与えたい場合には、1 の方法を使用されるか、appref-ms を作成して verb=open で Process.Start 等を実行するとよいでしょう。

    おそらく、どの方法を使用した場合でも、ダウンロードの成功やアプリケーションのインストール・実行を確認することはできません。

    • 回答としてマーク _kimura 2012年2月8日 10:35
    2012年2月8日 8:01
  • ご回答ありがとう御座います。

    大変参考になりました。

    追加で質問させていただきたいのですが、「URLのパラメータを渡せない」と
    言う内容については、run32dll.exe の仕様でしょうか。

    弊社環境で、kernel32.dllと.NET Frameworkを利用して

    1.LoadLibraryを使用して「dfshim.dll」のインスタンスを生成
    2.GetProcAddressを使用して「ShOpenVerbApplication」の関数ポインタ(エントリポイント)を取得
    3.Framework の Marshal.GetDelegateForFunctionPtr でポインタをDelegateに置換
    4.DelegateのInvokeメソッドを使用して「ShOpenVerbApplication」を呼出ル
      ※引数は オーナウインドのハンドル, ライブラリインスタンス, URL(パラメータ付き) の3つです
       第一、第二引数は、rundll32.exe で実行できるモジュールで共通?(詳しいところは確認していません。)

    で、一応のダウンロードは可能でした。
    dfshim.dllとしては、URL(パラメータ付き)についても対応していると言うことなのでしょうか。

    ご存知のお方がいましたらお教え頂けますでしょうか。

    2012年2月8日 10:35
  • dfshim.dllとしては、URL(パラメータ付き)についても対応していると言うことなのでしょうか。

    正式なドキュメントはおそらくないので、正確なところはわかりませんが、おそらく rundll32.exe 側のコマンドライン分析の都合だと思われます。

    ちなみに、apprefs-ms を直接起動する場合は、dfshim.dll の ShOpenVerbShortcut API を呼び出すようになっており、固定のパラメータを appref-ms に記述したり、動的なパラメータを | 区切りで渡すことができるようになっているようです。(こちらもドキュメントとかはないので、自己責任の範囲になるかと思います)

    > 1. 2. 3. 4...

    普通に呼び出すなら、P/Invoke の定義だけして終わりなきがします。

    • 回答としてマーク _kimura 2012年2月9日 1:03
    2012年2月8日 11:54
  • ご回答ありがとう御座います。
    参考にさせていただきます。

    > 1. 2. 3. 4...

      普通に呼び出すなら、P/Invoke の定義だけして終わりなきがします。

     確かにその通りでした。

    dfshim.dllに関する正式なドキュメントが見当たらなかったため、
    自己責任の範囲でShOpenVerbApplicationの摘要するか否か検討したいと思います。

    ご協力ありがとう御座いました。

    2012年2月9日 1:03