this one とよく似た質問がありますが、答えがうまくいきません。
私がセットアップを維持しているソフトウェアはVC++ 2008(正確にはSP1)に依存しているため、まだインストールされていない場合にVCRedistをインストールするための解決策を見つける必要があります。マージモジュールでmsiをビルドするのが正しい方法だと理解していますが、それは私の手にはありません。
すべての小さなリリース(たとえば、9.0.30729.01と9.0.30729.17)には適切なGUIDがあるため、私が参照している(承認されたもの)の重複した質問の答えは私には機能しません。 。さらに、これではVisual Studioが検出されないため、VCRedistパッケージが既に開発者のマシンにある場合は、不必要にVCRedistパッケージをインストールすると思います。私はこれで誰かにバグを犯したくありません。確かに、すでにDevStudioをインストールしている人ではありません。
今別の答えは$WINDIR\WinSxS\x86_Microsoft.VC80.CRT_
のようなWinSxsフォルダーを調べる必要があると言いますが、これは(まだ)SP1を暗示するのに役立ちません、またはこの時点で何か足りないものはありますか?内部と「外部」のバージョン番号が記載された表があるので、特定のマイナーバージョン番号を示すことができますか?
このシナリオでマイクロソフトから何も提供されていないことは信じられませんが、インターウェブをすでに非常に長い間検索していると、元の状態に戻りますSO :)
Directxのインストールには、推奨されるアプローチを使用できます。常に再配布可能ファイルを実行してください。これは必須であり、すでに出荷しているので、すでにインストールされていても、実行しても問題はありません。
Visual Studio C++ 2010の場合 物事が少し簡単になりました 。
Visual C++ 2005および2008再頒布可能パッケージとは異なり、Visual C++ 2010再頒布可能パッケージの存在を検出するために使用できるレジストリキーがあります。
Visual C++ 2010再頒布可能パッケージ検出レジストリ値
Visual C++ 2010再頒布可能パッケージ(x86)
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist\x86]インストール済み= 1(REG_DWORD)
Visual C++ 2010再頒布可能パッケージ(x64)
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist\x64]インストール済み= 1(REG_DWORD)
Visual C++ 2010再頒布可能パッケージ(ia64)
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist\ia64]インストール済み= 1(REG_DWORD)
注:64ビットOSのWow6432Nodeで確認する必要があります。 (HKLM\Software\Wow6432Node\Microsoft ....)
古いバージョンが気に入った場合は、GUIDを以下に示します
Visual C++ 2010再頒布可能パッケージの製品コード
Visual C++ 2010 SP1再頒布可能パッケージの製品コード
別のソリューション があるように見えます MsiQueryProductState API を使用して、Microsoft-Developerによって提案されましたが、悲しいことにGUIDにも依存しています。
更新:コードは昨日公開され、正常に動作しているようです。これが何をしているのかです:最新の既知であるGUID ANDインストールされている場所へのパス²がインストールされているかどうかがチェックされます。両方の場合失敗し、インストールされます。これは正常に動作するようです。
さらに、「無人だが見えない」ことを意味するコマンドライン引数「/ qb」とともにインストールされます。これらのパラメータについては この他のブログ投稿 を参照してください。
FWIW、Microsoft Visual C++ 2008/VC90 SP1再頒布可能パッケージのGUID-x86 9.0.30729
²パス:$WINDIR\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30729*
私はオープンソース化 VC++再頒布可能DLLをチェックするGithub上のVisual C++プロジェクト を具体的に指定し、Apache 2.0ライセンスの下で利用可能にしました。
VC++ 9およびVC++ 10ランタイムの可用性をチェックするための3つの異なる方法があります。
実際の使用例は次のとおりです。
wcout << _T("Checking for the availability of VC++ runtimes..") << endl;
wcout << _T("----------- Visual C++ 2008 (VC++9) -----------") << endl;
wcout << _T("Visual C++ 2008 (x86) ? ") << (IsVC2008Installed_x86() ? _T("true") : _T("false")) << endl;
wcout << _T("Visual C++ 2008 (x64) ? ") << (IsVC2008Installed_x64() ? _T("true") : _T("false")) << endl;
wcout << _T("Visual C++ 2008 SP1 (x86) ? ") << (IsVC2008SP1Installed_x86() ? _T("true") : _T("false")) << endl;
wcout << _T("Visual C++ 2008 SP1 (x64) ? ") << (IsVC2008SP1Installed_x64() ? _T("true") : _T("false")) << endl;
私は crt-detector プロジェクトをApache 2.0でライセンス供与したので、ご自分のアプリケーションで自由に使用してください。