33

Visual C++再配布可能ファイルがスタンドアロンであるかVisualStudio2008の一部としてインストールされているかどうかを判断するために探すことができるレジストリ設定はありますか?VC ++ 2008再配布可能インストーラーを起動して検出を処理できることは知っていますが、再配布可能ファイルが既にシステム上にある場合は、わざわざインストーラーを起動せずに、確認できればきれいに見えます。

検索する設定がなくても大したことはありません。これは、新しいバージョンのソフトウェア用に用意されている予備インストーラーのためだけのものだからです。私たちが取り組んでいる新しいWindowsインストーラーベースのインストーラーでは、古い技術のものを置き換え、マージモジュールを使用するためにそれは必要ありません。

4

13 に答える 13

19

異なるOSを使用している場合、これらのソリューションのいずれも役に立たないと思います! たとえば、Vista VC8.0 を使用すると、MsiQueryProductState は常に -1 を返します。

while -1 for VC8.0/8.0 SP1/9.0 with Windows 7 ! したがって、Microsoft が提供する GUID ソリューションは、すべての場合に機能するとは限りません。

だから私は %windir%\winsxs アプローチにこだわって検索することを余儀なくされていると思います

  • x86_Microsoft.VC80.CRT*
  • x86_Microsoft.VC90.CRT*

すべての GUID を探している人のために、私が作成したリストを次に示します。

Visual C++ 2005 ランタイム ファイル

* VC 8.0 (x86) - {A49F249F-0C91-497F-86DF-B2585E8E76B7}
* VC 8.0 (x64) - {6E8E85E8-CE4B-4FF5-91F7-04999C9FAE6A}
* VC 8.0 (ia64) - {03ED71EA-F531-4927-AABD-1C31BCE8E187}

Visual C++ 2005 SP1 ランタイム ファイル

* VC 8.0 SP1 (x86) - {7299052B-02A4-4627-81F2-1818DA5D550D}
* VC 8.0 SP1 (x64) - {071C9B48-7C32-4621-A0AC-3F809523288F}
* VC 8.0 SP1 (ia64) - {0F8FB34E-675E-42ED-850B-29D98C2ECE08}

Visual C++ 2005 SP1 ATL セキュリティ更新ランタイム ファイル

* VC 8.0 SP1 ATL Patch (x86) - {837B34E3-7C30-493C-8F6A-2B0F04E2912C}
* VC 8.0 SP1 ATL Patch (x64) - {6CE5BAE9-D3CA-4B99-891A-1DC6C118A5FC}
* VC 8.0 SP1 ATL Patch (ia64) - {85025851-A784-46D8-950D-05CB3CA43A13}

Visual C++ 2008 ランタイム ファイル

* VC 9.0 (x86) - {FF66E9F6-83E7-3A3E-AF14-8DE9A809A6A4}
* VC 9.0 (x64) - {350AA351-21FA-3270-8B7A-835434E766AD}
* VC 9.0 (ia64) - {2B547B43-DB50-3139-9EBE-37D419E0F5FA} 

Visual C++ 2008 SP1 ランタイム ファイル

* VC 9.0 SP1 (x86) - {9A25302D-30C0-39D9-BD6F-21E6EC160475}
* VC 9.0 SP1 (x64) - {8220EEFE-38CD-377E-8595-13398D740ACE}
* VC 9.0 SP1 (ia64) - {5827ECE1-AEB0-328E-B813-6FC68622C1F9}

Visual C++ 2008 SP1 ATL セキュリティ更新ランタイム ファイル

* VC 9.0 SP1 ATL (x86) - {1F1C2DFC-2D24-3E06-BCB8-725134ADF989}
* VC 9.0 SP1 ATL (x64) - {4B6C7001-C7D6-3710-913E-5BC23FCE91E6}
* VC 9.0 SP1 ATL (ia64) - {977AD349-C2A8-39DD-9273-285C08987C7B}
于 2010-05-21T07:36:48.317 に答える
16

レジストリを確認してください。

VC ++ 2008(sp1):HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall \ {3C3D696B-0DB7-3C6D-A356-3DB8CE541918}

また

VC ++ 2008(オリジナル):HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall \ {FF66E9F6-83E7-3A3E-AF14-8DE9A809A6A4}

于 2009-03-18T10:24:32.293 に答える
6

VC2005 の最新のもの:

Visual C++ 2005 Service Pack 1 再頒布可能パッケージ MFC セキュリティ更新プログラム

* VC 8.0 SP1 MFCLOC Patch (x86) - {710F4C1C-CC18-4C49-8CBF-51240C89A1A2}
* VC 8.0 SP1 MFCLOC Patch (x64) - {AD8A2FA1-06E7-4B0D-927D-6E54B3D31028}
* VC 8.0 SP1 MFCLOC Patch (ia64) - {C2F60BDA-462A-4A72-8E4D-CA431A56E9EA}

8.0.50727.6195

http://www.microsoft.com/downloads/details.aspx?familyid=AE2E1A40-7B45-4FE9-A20F-2ED2923ACA62

于 2011-10-01T11:11:52.750 に答える
5

クイックアンドダーティ:

if (LoadLibrary(L"msvcrt80.dll")!=NULL)
{
  // it is installed
}

Loadlibrary がパスの検索を処理します。

于 2008-10-15T00:00:52.207 に答える
5

MsiQueryProductState APIを使用して Microsoft-Developer によって提案された別のソリューションがあるように見えますが、残念ながら GUID にも依存しています。

更新: コードは昨日公開され、正常に動作しているようです。これが行われていることです: 最新の既知の GUID と、インストールされるはずの場所へのパス² がチェックされます。両方とも失敗した場合は、インストールされます。これはうまくいくようです。

さらに、コマンド ライン引数 "/qb" を使用してインストールされます。これは、"無人だが不可視ではない" ことを意味します。これらのパラメーターについては、この他のブログ投稿を参照してください。

FWIW、Microsoft Visual C++ 2008 / VC90 SP1 再頒布可能パッケージの GUID - x86 9.0.30729

  • 64 ビット 30729.17: 8220EEFE-38CD-377E-8595-13398D740ACE
  • 32ビット 30729.17: 9A25302D-30C0-39D9-BD6F-21E6EC160475
  • 32 ビット 30729.01: 6AFCA4E1-9B78-3640-8F72-A7BF33448200

² パス: $WINDIR\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30729*

于 2009-04-09T15:27:44.170 に答える
2

VC++ 再頒布可能 DLL を特にチェックする Visual C++ プロジェクトを Github でオープンソース化し、Apache 2.0 ライセンスの下で利用できるようにしました。

VC++9 および VC++10 ランタイムの可用性をチェックするための 3 つの異なる方法があります。

  1. MsiQueryProductState API をチェックします。
  2. WinSxS フォルダーの内容を調べて、一致する製品ディレクトリを探します。と
  3. 現在の作業ディレクトリで VC++9 および VC++10 ランタイムのローカル バージョンを確認します (そしてその内容を調べます)。

編集:これは、実際にどのように使用するかのサンプルです。

 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;

私はApache 2.0 でcrt-detectorプロジェクトのライセンスを取得しましたので、ご自身のアプリケーションで自由に使用してください。

于 2013-11-14T05:23:31.323 に答える
2

$WINDIR\WinSxS\x86_Microsoft.VC90.CRT_*たとえば、Visual Studio 2008 再頒布可能パッケージをチェックしているかどうかを確認します。

于 2008-10-15T05:51:01.487 に答える
1

この問題にぶつかった他の人のために更新してください:

1)Visual Studioがインストールされている場合、必要なDLLは存在しますが、「redistパッケージ」は存在しないため、レジストリキーがありません。(つまり、これは偽陰性になります)。ただし、この状況でredistを上にインストールしても無害です。

2)redistのすべてのメジャーリリース(VS2005 / VS2008、x86 / x64 / IA64、およびサービスパックの任意の組み合わせ:SP1、ATLセキュリティ更新プログラム)には、異なるGUIDがあります。アプリケーションをx86PCとx64PCの両方に展開する予定がある場合は注意してください。

3)LoadLibraryまたはDLLファイルのチェックを使用する場合は、正しいバージョンをターゲットにしていることを確認してください。msvcrt80.dll(etc)の「任意の」コピーを探す場合、それがプログラムがリンクされているバージョンであるかどうかを判断することはできません。

于 2009-09-11T12:55:58.900 に答える
1

「Microsoft Visual C++ 2008 Service Pack 1 Redistributable Package MFC Security Update (x86)」のプロダクト コードは {9BE518E6-ECC6-35A9-88E4-87755C07200F} です。

于 2011-10-21T13:24:40.737 に答える
0

最も確実な方法は、さまざまなvcredistバージョンのGUIDでMsiQueryProductStateAPIを使用することです。

できます!

よろしく。

于 2011-08-25T11:32:44.183 に答える
0

次の値でGUIDリストを拡張したいと思います。

32ビット30729.17
{9A25302D-30C0-39D9-BD6F-21E6EC160475}
32ビット30729.01
{6AFCA4E1-9B78-3640-8F72-A7BF33448200}
64ビット30729.17
{8220EEFE-38CD-377E-8595-13398D740ACE}
64ビット30729.01
{0DF3AE91 B23737F8B7A2}
VC ++ 2008(sp1)
{3C3D696B-0DB7-3C6D-A356-3DB8CE541918}
VC ++ 2008(オリジナル)
{FF66E9F6-83E7-3A3E-AF14-8DE9A809A6A4}
IA64 30729.01
{22E23C71-C27A-3F30 }
32ビット30729.4148
{7B33F480-496D-334A-BAC2-205DEC0CBC2D}
Visual Studio 2008 Professional SP1
{D7DAD1E4-45F4-3B2B-899A-EA728167EC4F}
32ビット30729.01
{F333A33D-125C-32A2-8DCE-5C5D14231E27}

したがって、GUIDによってVCredistの存在を確認することをお勧めするかどうかを判断してください。

于 2009-10-13T20:05:02.370 に答える
0

WINDOWS \ WinSxSディレクトリの下のファイルをチェックして、インストールしたバージョンを確認できます。多くの場合、一度に多くのバージョンをインストールできるため、インストールした特定のバージョンを確認する必要がある場合があります。

于 2008-10-14T23:29:16.703 に答える