トップ回答者
VS2019のインストールフォルダは、レジストリに登録されていない?

質問
-
よろしくお願いします。
いままでのVSのインストールフォルダは、下記のようにレジストリにバージョン別に登録されていました。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\SxS\VS7\14.0
C:\Program Files\Microsoft Visual Studio 14.0\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\SxS\VS7\12.0
C:\Program Files\Microsoft Visual Studio 12.0\
ただ、VS2019のインストールフォルダについては、どこを探しても無いのです。
近いと言えば、下記ぐらいでしょうか?
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\devenv.exe
"C:\Program Files\Microsoft Visual Studio\2019\Community\common7\ide\devenv.exe"
ただ、これだと複数のVSが共存している場合は、少し不安が残ります。そこで、質問です。
VS2019のインストールフォルダは、どのレジストリを見れば良いか教えていただけないでしょうか?
回答
-
ただ、ちょっと不思議なのが、VSのようなメジャーなソフトのインストール先を得るのに、こんなにも情報が無いものかのかなと思いまして。
昔のように、環境変数:VS90COMNTOOLSや先に書いたように所定のレジストリがあったりとか。考え違いしていませんか?
多くのアプリケーションや、Visual Studio 2015 までは「そのアプリケーション・バージョンはマシンに1つ同時に存在しない」という前提を満たしていたので、HKEY_LOCAL_MACHINE などから容易に取得できたのでしょう。
Visual Studio 2017 からは複数のエディションが同時に存在できるようになり、Visual Studio 2019 からはリリースチャンネルとプレビューチャンネルが同時に存在できる ようになりました。
つまり、多くのアプリケーションとは、異なる仕様になったわけです。質問者さんのように、従来と同じようなやり方でも取得できるべきだと主張される方もいらっしゃるかもしれませんが、複数のインスタンスを配置していたとき、質問者さんのインストーラーはどう動くべきでしょうか?
そして、その答えはすべての同じ立場の人々に満足する答えとなるのでしょうか?
そのように考えると、古いやり方で取得できるように道を作るのではなく、新しい考え方に対応して欲しい側だと思いますよ。
(質問者さんの望む答えが仮に得られたとしても、質問者さんのインストーラーはお客さんを満足させられない可能性があると言うことです。複数インスタンスを使っているお客さんがいるならば)- 編集済み AzuleanMVP, Moderator 2019年4月7日 9:23
- 回答としてマーク VBの技術者 2019年4月7日 9:50
すべての返信
-
インストールされている Visual Studio インスタンスを検出するマイクロソフト製のツールが公開されています。(Visual Studio 2019 にも対応しています)
https://docs.microsoft.com/ja-jp/visualstudio/install/tools-for-managing-visual-studio-instances?view=vs-2019上記のツールを使用して devenv.exe のパスを取得するのはいかがでしょうか?
オープンソースのツールなので中身の処理を見ることでどうやって取得しているのかわかるかもしれません。- 編集済み kenjinoteMVP 2019年4月4日 13:36
-
みなさん、回答ありがとうございます。
申し訳ありません。
二年前に質問した事をすっかり忘れておりました。
その時は、立花楓様に教えていただいた、下記のレジストリを使わせてもらいました。
•32bit OSではHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\SxS\VS7
•64bit OSではHKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\VisualStudio\SxS\VS7インストールパスを知りたい理由は、VSの環境にインストールするインストーラを作っております。
インストーラの独自の言語を使って、レジストリや環境変数から、VSパス名を取得し、VSの標準ツールを起動しています。 -
2年前に回答したのは私ですが? 回答者を間違えるのは失礼ですよ。
vswhereの処理を追いかけてみましたが、Visual Studio SDKのISetupConfiguration2.EnumAllInstances Methodに辿り着きました。
「VSの環境にインストールするインストーラ」ということでしたら、変なことは行わずVisual Studio SDKを使用してVSIXを作成してはどうでしょうか。
-
佐祐理様、誠に申し訳ございません。
おっしゃる通りです。前回は、本当にありがとうございました。
大変助かりました。
感謝でございます。
実は随分前から使っているインストーラがありまして、作成し直すのは現実的ではないのです。
それもあって、レジストリや環境変数から何とか、VSパス名を取得する方法を探っているのです。私なりに調べておりますが、やはり下記は一番最初にインストールした、VSのバージョンのdevenv.exeのパスが入るようです。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\devenv.exe
"C:\Program Files\Microsoft Visual Studio\2019\Community\common7\ide\devenv.exe" -
みなさん、ご意見をいただいてありがとうございます。
ご提案していただいた方法などで、色々と頑張ってみたのですが、なかなか思った通りの結果が得られず・・・。
ただ、ちょっと不思議なのが、VSのようなメジャーなソフトのインストール先を得るのに、こんなにも情報が無いものかのかなと思いまして。
昔のように、環境変数:VS90COMNTOOLSや先に書いたように所定のレジストリがあったりとか。レジストリで、.slnなどに紐付いているものも、下記のようだったりと、ちょっと釈然としないのです。
"C:\Program Files\Common Files\Microsoft Shared\MSEnv\\VSLauncher.exe" "%1" -
ただ、ちょっと不思議なのが、VSのようなメジャーなソフトのインストール先を得るのに、こんなにも情報が無いものかのかなと思いまして。
昔のように、環境変数:VS90COMNTOOLSや先に書いたように所定のレジストリがあったりとか。考え違いしていませんか?
多くのアプリケーションや、Visual Studio 2015 までは「そのアプリケーション・バージョンはマシンに1つ同時に存在しない」という前提を満たしていたので、HKEY_LOCAL_MACHINE などから容易に取得できたのでしょう。
Visual Studio 2017 からは複数のエディションが同時に存在できるようになり、Visual Studio 2019 からはリリースチャンネルとプレビューチャンネルが同時に存在できる ようになりました。
つまり、多くのアプリケーションとは、異なる仕様になったわけです。質問者さんのように、従来と同じようなやり方でも取得できるべきだと主張される方もいらっしゃるかもしれませんが、複数のインスタンスを配置していたとき、質問者さんのインストーラーはどう動くべきでしょうか?
そして、その答えはすべての同じ立場の人々に満足する答えとなるのでしょうか?
そのように考えると、古いやり方で取得できるように道を作るのではなく、新しい考え方に対応して欲しい側だと思いますよ。
(質問者さんの望む答えが仮に得られたとしても、質問者さんのインストーラーはお客さんを満足させられない可能性があると言うことです。複数インスタンスを使っているお客さんがいるならば)- 編集済み AzuleanMVP, Moderator 2019年4月7日 9:23
- 回答としてマーク VBの技術者 2019年4月7日 9:50