none
VS2019のインストールフォルダは、レジストリに登録されていない? RRS feed

  • 質問

  • よろしくお願いします。


    いままでの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のインストールフォルダは、どのレジストリを見れば良いか教えていただけないでしょうか?

    2019年4月4日 12:40

回答

  • ただ、ちょっと不思議なのが、VSのようなメジャーなソフトのインストール先を得るのに、こんなにも情報が無いものかのかなと思いまして。
    昔のように、環境変数:VS90COMNTOOLSや先に書いたように所定のレジストリがあったりとか。

    考え違いしていませんか?

    多くのアプリケーションや、Visual Studio 2015 までは「そのアプリケーション・バージョンはマシンに1つ同時に存在しない」という前提を満たしていたので、HKEY_LOCAL_MACHINE などから容易に取得できたのでしょう。

    Visual Studio 2017 からは複数のエディションが同時に存在できるようになり、Visual Studio 2019 からはリリースチャンネルとプレビューチャンネルが同時に存在できる ようになりました。
    つまり、多くのアプリケーションとは、異なる仕様になったわけです。

    質問者さんのように、従来と同じようなやり方でも取得できるべきだと主張される方もいらっしゃるかもしれませんが、複数のインスタンスを配置していたとき、質問者さんのインストーラーはどう動くべきでしょうか?
    そして、その答えはすべての同じ立場の人々に満足する答えとなるのでしょうか?
    そのように考えると、古いやり方で取得できるように道を作るのではなく、新しい考え方に対応して欲しい側だと思いますよ。
    (質問者さんの望む答えが仮に得られたとしても、質問者さんのインストーラーはお客さんを満足させられない可能性があると言うことです。複数インスタンスを使っているお客さんがいるならば)

    2019年4月7日 9:19
    モデレータ

すべての返信

  • 前回の質問の際に確認すればよかったのですが、インストールパスを知りたい理由は何でしょうか? 本来、レジストリを漁る必要がないからこそ記録されていないわけです。目的を開示していただけたら別のアプローチが提案できるかもしれません。
    2019年4月4日 13:28
  • インストールされている Visual Studio インスタンスを検出するマイクロソフト製のツールが公開されています。(Visual Studio 2019 にも対応しています)

    https://docs.microsoft.com/ja-jp/visualstudio/install/tools-for-managing-visual-studio-instances?view=vs-2019

    上記のツールを使用して devenv.exe のパスを取得するのはいかがでしょうか?
    オープンソースのツールなので中身の処理を見ることでどうやって取得しているのかわかるかもしれません。

    2019年4月4日 13:35
  • 前回の質問 で VS2017 から複数のインスタンスが併存できる仕様に変わっており、レジストリで取れなくなっていることをご存知のはずですが、なぜ「いままでの VS」と表現されたのでしょうか・・・。

    また、VS2019 は Preview channel のインスタンスも併存できる仕様になっているので、単純なレジストリでの判別は無理だと考えた方が良いでしょう。


    2019年4月4日 14:46
    モデレータ
  • みなさん、回答ありがとうございます。

    申し訳ありません。
    二年前に質問した事をすっかり忘れておりました。
    その時は、立花楓様に教えていただいた、下記のレジストリを使わせてもらいました。
    •32bit OSではHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\SxS\VS7
    •64bit OSではHKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\VisualStudio\SxS\VS7

    インストールパスを知りたい理由は、VSの環境にインストールするインストーラを作っております。
    インストーラの独自の言語を使って、レジストリや環境変数から、VSパス名を取得し、VSの標準ツールを起動しています。

    2019年4月5日 0:15
  • 2年前に回答したのは私ですが? 回答者を間違えるのは失礼ですよ。

    vswhereの処理を追いかけてみましたが、Visual Studio SDKのISetupConfiguration2.EnumAllInstances Methodに辿り着きました。

    「VSの環境にインストールするインストーラ」ということでしたら、変なことは行わずVisual Studio SDKを使用してVSIXを作成してはどうでしょうか。

    2019年4月5日 5:40
  • 佐祐理様、誠に申し訳ございません。
    おっしゃる通りです。

    前回は、本当にありがとうございました。
    大変助かりました。
    感謝でございます。


    実は随分前から使っているインストーラがありまして、作成し直すのは現実的ではないのです。
    それもあって、レジストリや環境変数から何とか、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"

    2019年4月5日 6:52
  • kenjinote さんが提案されている "vswhere.exe" の挙動を "Process Monitor" で Capture すれば、このソフトウェアがどこのレジストリ キーを参照しているのか確認できます。
    2019年4月5日 9:03
  • みなさん、ご意見をいただいてありがとうございます。

    ご提案していただいた方法などで、色々と頑張ってみたのですが、なかなか思った通りの結果が得られず・・・。
    ただ、ちょっと不思議なのが、VSのようなメジャーなソフトのインストール先を得るのに、こんなにも情報が無いものかのかなと思いまして。
    昔のように、環境変数:VS90COMNTOOLSや先に書いたように所定のレジストリがあったりとか。

    レジストリで、.slnなどに紐付いているものも、下記のようだったりと、ちょっと釈然としないのです。
    "C:\Program Files\Common Files\Microsoft Shared\MSEnv\\VSLauncher.exe" "%1"

    2019年4月7日 8:47
  • ただ、ちょっと不思議なのが、VSのようなメジャーなソフトのインストール先を得るのに、こんなにも情報が無いものかのかなと思いまして。
    昔のように、環境変数:VS90COMNTOOLSや先に書いたように所定のレジストリがあったりとか。

    考え違いしていませんか?

    多くのアプリケーションや、Visual Studio 2015 までは「そのアプリケーション・バージョンはマシンに1つ同時に存在しない」という前提を満たしていたので、HKEY_LOCAL_MACHINE などから容易に取得できたのでしょう。

    Visual Studio 2017 からは複数のエディションが同時に存在できるようになり、Visual Studio 2019 からはリリースチャンネルとプレビューチャンネルが同時に存在できる ようになりました。
    つまり、多くのアプリケーションとは、異なる仕様になったわけです。

    質問者さんのように、従来と同じようなやり方でも取得できるべきだと主張される方もいらっしゃるかもしれませんが、複数のインスタンスを配置していたとき、質問者さんのインストーラーはどう動くべきでしょうか?
    そして、その答えはすべての同じ立場の人々に満足する答えとなるのでしょうか?
    そのように考えると、古いやり方で取得できるように道を作るのではなく、新しい考え方に対応して欲しい側だと思いますよ。
    (質問者さんの望む答えが仮に得られたとしても、質問者さんのインストーラーはお客さんを満足させられない可能性があると言うことです。複数インスタンスを使っているお客さんがいるならば)

    2019年4月7日 9:19
    モデレータ
  • ありがとうございます。
    腑に落ちた部分がありました。
    確かにその通りですね。考え違いをしておりました。

    メリット、デメリットを考えて今の仕様になっているのも、理解できたような気がします。
    今回のスレッドはここで閉じさせていただいて、もっと具体的な内容で改めて質問させていただきます。
    皆さん、本当にありがとうございました。
    これからも、よろしくお願いします。

    2019年4月7日 9:50