none
VSPackageインストール時、VSIXインストーラダイアログを出さない方法は? RRS feed

  • 質問

  • みなさん、よろしくお願いします。

    VS拡張機能のVSPackageを作っています。
    機能は全て出来上がって、インストーラについて悩んでおります。

    foo.vsixを使って、インストールするのですが、起動をすると
    ダイアログタイトル:VSIXインストーラ、拡張機能をインストールする製品を選択してください・・・
    という、ダイアログが出て、「インストール(I)」ボタンをクリックしないといけません。
    このダイアログを出さないで、勝手にインストールする方法はありませんでしょうか?

    他のプログラムから、このインストーラを起動するので、
    バッチ的に自動インストールしたいのです。

    ほんの少しの情報でも構いませんので、教えていただければ幸いです。
    2015年8月13日 5:31

回答

  • レジストリのHKCU\Software\Microsoft\VisualStudio\[バージョン]_Config\VSIXInstallerLocationからVSIXInstaller.exeのパスを探し、「VSIXInstaller.exe /q filepath.vsix」のように/qオプション付きで起動する。

    引数なしでVSIXInstaller.exeを起動すると他のオプションも確認できます


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 編集済み gekkaMVP 2015年8月13日 7:20
    • 回答の候補に設定 星 睦美 2015年8月17日 1:50
    • 回答としてマーク 技術者 2015年8月27日 0:34
    2015年8月13日 7:19
  • 最初にちょっとしたことに気づくかどうかですね

    1. VSを起動してVSIXファイルを適当に作る
    2. 出来たVSIXをダブルクリックしてダイアログが表示されるのと、インストールが成功するのを確認してアンインストール。
    3. 再度ダブルクリックし、ダイアログを出したままでタスクマネージャーでプロセス一覧を見て、それっぽいプロセス(VSIXInstaller.exe)を見つけて、プロセスからコマンドラインを調べる。
    4. コマンドプロンプトにそのまま同じように入力して起動してみて、インストーラーが起動することを確認。
    5. /?引数でヘルプが表示されるプログラムは多いので、同様にVSIXInstaller.exeも/?オプションや引数なしで起動してみると、起動オプションの一覧が表示された。
    6. 今度は一覧にある/quietや/qオプションをつけて起動。ダイアログが表示されない。
    7. VisualStudioを起動してインストールができていることが確認できた。

    ここまででとりあえず必要な情報が得られたが、自動インストールのためにはVSIXInstallerにオプションを渡す方法もいるので、VSIXInstallerのパスを探してみることにする。

    1. レジストリで拡張子がVSIXと関連付けがどうなっているかを調べる。
      (ダブルクリックでVSIXInsatllerが起動するのだから、拡張子の関連付けがされているはず)
    2. HKEY_CLASSES_ROOT\.vsix の値がVisualStudio.Launcher.vsixになっているのが判る
    3. HKEYCLASSESS_ROOT\VisualStudio.Launcher.vsix\Shell\Open\Command\ を見るとVSLauncher.exeを起動していることがわかる
    4. VSLauncherとは複数バージョンのVisualStudioから適切なバージョンを起動するためのプログラムなので、VSIXも同様に適切なプログラムが起動されるようになっていると考えられる。
    5. VSLauncher.exeに引数を変えていろいろ試すが/qオプションをVSIXInstaller.exeに渡す方法は見つからなかった。
    6. 仕方がないのでVSIXInstallerを自分で探して起動させることにする。
    7. HKCU\Software\Microsoft\VisualStudio以下にユーザーごとの設定があることは知っていたので、調べてみると[バージョン]_Config\VSIXInstallerLocationにフルパスが見つかった。
    8. 先ほどのコマンドラインと同じなので、ここを調べればよさそうという事が判る。

    以上が回答までの流れです。


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答の候補に設定 星 睦美 2015年8月26日 4:13
    • 回答としてマーク 技術者 2015年8月27日 0:34
    2015年8月20日 11:03

すべての返信

  • レジストリのHKCU\Software\Microsoft\VisualStudio\[バージョン]_Config\VSIXInstallerLocationからVSIXInstaller.exeのパスを探し、「VSIXInstaller.exe /q filepath.vsix」のように/qオプション付きで起動する。

    引数なしでVSIXInstaller.exeを起動すると他のオプションも確認できます


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 編集済み gekkaMVP 2015年8月13日 7:20
    • 回答の候補に設定 星 睦美 2015年8月17日 1:50
    • 回答としてマーク 技術者 2015年8月27日 0:34
    2015年8月13日 7:19
  • 回答が遅れて申し訳ありません。
    お陰さまで、教えて頂いた通りで、機能が実現できました。
    本当にありがとうございます。助かりました。

    今回の質問は、これで解決したのですが・・・
    もし、お時間があればで、結構ですが教えていただけないでしょうか。

    VSIXの情報はかなり少ないと思います。
    私も一生懸命探したつもりですが、なかなか今回のような素晴らしい回答の
    ような情報に出会わなかったです。

    そこで、この短期間で、どのような手順でお調べになったかを、教えていただければ幸いです。
    今後、同じような事が起きたら、何とか自分で解決したいと思っております。

    もちろん、お時間があればで結構なので、面倒であればスルーしていただいても
    構いません。

    この度は、本当にありがとうございました。

    2015年8月20日 9:12
  • 最初にちょっとしたことに気づくかどうかですね

    1. VSを起動してVSIXファイルを適当に作る
    2. 出来たVSIXをダブルクリックしてダイアログが表示されるのと、インストールが成功するのを確認してアンインストール。
    3. 再度ダブルクリックし、ダイアログを出したままでタスクマネージャーでプロセス一覧を見て、それっぽいプロセス(VSIXInstaller.exe)を見つけて、プロセスからコマンドラインを調べる。
    4. コマンドプロンプトにそのまま同じように入力して起動してみて、インストーラーが起動することを確認。
    5. /?引数でヘルプが表示されるプログラムは多いので、同様にVSIXInstaller.exeも/?オプションや引数なしで起動してみると、起動オプションの一覧が表示された。
    6. 今度は一覧にある/quietや/qオプションをつけて起動。ダイアログが表示されない。
    7. VisualStudioを起動してインストールができていることが確認できた。

    ここまででとりあえず必要な情報が得られたが、自動インストールのためにはVSIXInstallerにオプションを渡す方法もいるので、VSIXInstallerのパスを探してみることにする。

    1. レジストリで拡張子がVSIXと関連付けがどうなっているかを調べる。
      (ダブルクリックでVSIXInsatllerが起動するのだから、拡張子の関連付けがされているはず)
    2. HKEY_CLASSES_ROOT\.vsix の値がVisualStudio.Launcher.vsixになっているのが判る
    3. HKEYCLASSESS_ROOT\VisualStudio.Launcher.vsix\Shell\Open\Command\ を見るとVSLauncher.exeを起動していることがわかる
    4. VSLauncherとは複数バージョンのVisualStudioから適切なバージョンを起動するためのプログラムなので、VSIXも同様に適切なプログラムが起動されるようになっていると考えられる。
    5. VSLauncher.exeに引数を変えていろいろ試すが/qオプションをVSIXInstaller.exeに渡す方法は見つからなかった。
    6. 仕方がないのでVSIXInstallerを自分で探して起動させることにする。
    7. HKCU\Software\Microsoft\VisualStudio以下にユーザーごとの設定があることは知っていたので、調べてみると[バージョン]_Config\VSIXInstallerLocationにフルパスが見つかった。
    8. 先ほどのコマンドラインと同じなので、ここを調べればよさそうという事が判る。

    以上が回答までの流れです。


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答の候補に設定 星 睦美 2015年8月26日 4:13
    • 回答としてマーク 技術者 2015年8月27日 0:34
    2015年8月20日 11:03
  • 丁寧に解説までいただき本当にありがとうございます。
    確かにこのように書いていただくと、自分でもできるような気がしますが、
    何も無い状態から、ここまで辿り着くのは困難に思います。
    特に、上段の3については、そもそも発想が無かったです。
    Googleの前に、考えるという事でしょうかね。

    これからは少しでも自分で解決できるように頑張ってみます。
    この度は、本当に助かりました。

    • 回答としてマーク 技術者 2015年8月27日 0:34
    • 回答としてマークされていない 技術者 2015年8月27日 0:34
    2015年8月26日 1:30
  • フォーラム オペレーターの星 睦美です。
    gekka さん、丁寧な回答ありがとうございます。

    技術者 さん、今回はgekka さんからの回答が参考になったという返信をいただきありがとうございます。役立った回答には投稿者から[回答としてマーク] いただけると、さらに投稿者の励ましになります。(お忘れのような場合には私から回答としてマークさせていただきますね。)それでは今後ともフォーラムをお役立てください。


    フォーラム オペレーター 星 睦美 - MSDN Community Support

    2015年8月26日 4:13