トップ回答者
VSPackageインストール時、VSIXインストーラダイアログを出さない方法は?

質問
-
みなさん、よろしくお願いします。
VS拡張機能のVSPackageを作っています。
機能は全て出来上がって、インストーラについて悩んでおります。foo.vsixを使って、インストールするのですが、起動をすると
ダイアログタイトル:VSIXインストーラ、拡張機能をインストールする製品を選択してください・・・
という、ダイアログが出て、「インストール(I)」ボタンをクリックしないといけません。
このダイアログを出さないで、勝手にインストールする方法はありませんでしょうか?他のプログラムから、このインストーラを起動するので、
ほんの少しの情報でも構いませんので、教えていただければ幸いです。
バッチ的に自動インストールしたいのです。
回答
-
レジストリのHKCU\Software\Microsoft\VisualStudio\[バージョン]_Config\VSIXInstallerLocationからVSIXInstaller.exeのパスを探し、「VSIXInstaller.exe /q filepath.vsix」のように/qオプション付きで起動する。
引数なしでVSIXInstaller.exeを起動すると他のオプションも確認できます
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
-
最初にちょっとしたことに気づくかどうかですね
- VSを起動してVSIXファイルを適当に作る
- 出来たVSIXをダブルクリックしてダイアログが表示されるのと、インストールが成功するのを確認してアンインストール。
- 再度ダブルクリックし、ダイアログを出したままでタスクマネージャーでプロセス一覧を見て、それっぽいプロセス(VSIXInstaller.exe)を見つけて、プロセスからコマンドラインを調べる。
- コマンドプロンプトにそのまま同じように入力して起動してみて、インストーラーが起動することを確認。
- /?引数でヘルプが表示されるプログラムは多いので、同様にVSIXInstaller.exeも/?オプションや引数なしで起動してみると、起動オプションの一覧が表示された。
- 今度は一覧にある/quietや/qオプションをつけて起動。ダイアログが表示されない。
- VisualStudioを起動してインストールができていることが確認できた。
ここまででとりあえず必要な情報が得られたが、自動インストールのためにはVSIXInstallerにオプションを渡す方法もいるので、VSIXInstallerのパスを探してみることにする。
- レジストリで拡張子がVSIXと関連付けがどうなっているかを調べる。
(ダブルクリックでVSIXInsatllerが起動するのだから、拡張子の関連付けがされているはず) - HKEY_CLASSES_ROOT\.vsix の値がVisualStudio.Launcher.vsixになっているのが判る
- HKEYCLASSESS_ROOT\VisualStudio.Launcher.vsix\Shell\Open\Command\ を見るとVSLauncher.exeを起動していることがわかる
- VSLauncherとは複数バージョンのVisualStudioから適切なバージョンを起動するためのプログラムなので、VSIXも同様に適切なプログラムが起動されるようになっていると考えられる。
- VSLauncher.exeに引数を変えていろいろ試すが/qオプションをVSIXInstaller.exeに渡す方法は見つからなかった。
- 仕方がないのでVSIXInstallerを自分で探して起動させることにする。
- HKCU\Software\Microsoft\VisualStudio以下にユーザーごとの設定があることは知っていたので、調べてみると[バージョン]_Config\VSIXInstallerLocationにフルパスが見つかった。
- 先ほどのコマンドラインと同じなので、ここを調べればよさそうという事が判る。
以上が回答までの流れです。
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
すべての返信
-
レジストリのHKCU\Software\Microsoft\VisualStudio\[バージョン]_Config\VSIXInstallerLocationからVSIXInstaller.exeのパスを探し、「VSIXInstaller.exe /q filepath.vsix」のように/qオプション付きで起動する。
引数なしでVSIXInstaller.exeを起動すると他のオプションも確認できます
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
-
回答が遅れて申し訳ありません。
お陰さまで、教えて頂いた通りで、機能が実現できました。
本当にありがとうございます。助かりました。今回の質問は、これで解決したのですが・・・
もし、お時間があればで、結構ですが教えていただけないでしょうか。VSIXの情報はかなり少ないと思います。
私も一生懸命探したつもりですが、なかなか今回のような素晴らしい回答の
ような情報に出会わなかったです。そこで、この短期間で、どのような手順でお調べになったかを、教えていただければ幸いです。
今後、同じような事が起きたら、何とか自分で解決したいと思っております。もちろん、お時間があればで結構なので、面倒であればスルーしていただいても
構いません。この度は、本当にありがとうございました。
-
最初にちょっとしたことに気づくかどうかですね
- VSを起動してVSIXファイルを適当に作る
- 出来たVSIXをダブルクリックしてダイアログが表示されるのと、インストールが成功するのを確認してアンインストール。
- 再度ダブルクリックし、ダイアログを出したままでタスクマネージャーでプロセス一覧を見て、それっぽいプロセス(VSIXInstaller.exe)を見つけて、プロセスからコマンドラインを調べる。
- コマンドプロンプトにそのまま同じように入力して起動してみて、インストーラーが起動することを確認。
- /?引数でヘルプが表示されるプログラムは多いので、同様にVSIXInstaller.exeも/?オプションや引数なしで起動してみると、起動オプションの一覧が表示された。
- 今度は一覧にある/quietや/qオプションをつけて起動。ダイアログが表示されない。
- VisualStudioを起動してインストールができていることが確認できた。
ここまででとりあえず必要な情報が得られたが、自動インストールのためにはVSIXInstallerにオプションを渡す方法もいるので、VSIXInstallerのパスを探してみることにする。
- レジストリで拡張子がVSIXと関連付けがどうなっているかを調べる。
(ダブルクリックでVSIXInsatllerが起動するのだから、拡張子の関連付けがされているはず) - HKEY_CLASSES_ROOT\.vsix の値がVisualStudio.Launcher.vsixになっているのが判る
- HKEYCLASSESS_ROOT\VisualStudio.Launcher.vsix\Shell\Open\Command\ を見るとVSLauncher.exeを起動していることがわかる
- VSLauncherとは複数バージョンのVisualStudioから適切なバージョンを起動するためのプログラムなので、VSIXも同様に適切なプログラムが起動されるようになっていると考えられる。
- VSLauncher.exeに引数を変えていろいろ試すが/qオプションをVSIXInstaller.exeに渡す方法は見つからなかった。
- 仕方がないのでVSIXInstallerを自分で探して起動させることにする。
- HKCU\Software\Microsoft\VisualStudio以下にユーザーごとの設定があることは知っていたので、調べてみると[バージョン]_Config\VSIXInstallerLocationにフルパスが見つかった。
- 先ほどのコマンドラインと同じなので、ここを調べればよさそうという事が判る。
以上が回答までの流れです。
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)