質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

1回答

523閲覧

VisualC++2013の再配布可能ファイルがインストールされているかを調べたい

Hiroyuki_NG

総合スコア12

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/01/10 06:59

###前提・実現したいこと
VisualStudio2005(言語はC++)を使用して、実機にVisualC++2013の再配布可能ファイルがインストールされているかどうかを検出しようとしております。

###発生している問題・エラーメッセージ

所定の関数にてインストールされている製品情報を取得しようとするのですが、VisualC++2013の再配布可能ファイルがインストールされているのにも関わらず、情報が返ってきません。

###該当のソースコード

DWORD dwSize = 0;
char pAplname = NULL;
UINT res;
for (int i = 0;; i++) {
memset(proname, '\0', sizeof(proname));
if (::MsiEnumProductsA(i, proname) == ERROR_SUCCESS) {
dwSize = 0;
res = ::MsiGetProductInfoA(proname, INSTALLPROPERTY_INSTALLEDPRODUCTNAME, NULL, &dwSize);
if (res == ERROR_SUCCESS) {
if (pAplname) {
delete[] pAplname;
pAplname = NULL;
}
dwSize += 1;
if ((pAplname = new char[dwSize]) == NULL) {
return -1;
}
memset(pAplname, '\0', sizeof(char)
(dwSize));

res = ::MsiGetProductInfoA(proname, INSTALLPROPERTY_INSTALLEDPRODUCTNAME, pAplname, &dwSize); if (res == ERROR_SUCCESS) { CString tstStr = pAplname; if (tstStr.Find(_T("Microsoft Visual C++ 2013 Redistributable")) != -1) { break; } } } } else { break; }

}

if (pAplname) {
delete[] pAplname;
pAplname = NULL;
}

###試したこと
課題に対してアプローチしたことを記載してください

###補足情報(言語/FW/ツール等のバージョンなど)
Visual Studio 2005
C++

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KoichiSugiyama

2018/01/10 07:20

「VisualC++2013の再配布可能ファイルがインストールされているのにも関わらず、情報が返ってきません。」というのは、具体的に言うと何も情報が返ってこないのでしょうか?それとも該当する情報が返って来ないという意味でしょうか。
KoichiSugiyama

2018/01/10 07:20

ループで取得した情報をファイルにすべて書き出してみるとどのような結果になりますか?
Hiroyuki_NG

2018/01/10 07:29

他の情報(例:VisualC+2008の再配布可能ファイル)は返ってくるのですが、該当する情報が返ってこない形になります。
guest

回答1

0

この質問のプログラムだと、うちの環境では
Microsoft Visual C++ 2013 x86 Minimum Runtime
Microsoft Visual C++ 2013 x86 Additional Runtime
Microsoft Visual C++ 2013 x64 Additional Runtime
Microsoft Visual C++ 2013 x64 Minimum Runtime
は取得できるけど、「プログラムのアンインストールまたは変更」での表記と一致する
Microsoft Visual C++ 2013 Redistributable
は取得できないみたいですね。
Microsoft Visual C++ 2008 Redistributable
は取得できるのですが。

レジストリから取得する方法を試してみてはどうでしょうか。
コマンドプロンプトでインストールソフト一覧を取得する(64bitOS対応版)
リモートレジストリサービスを使った64bit版Windows 7端末のUninstall情報の取得について

投稿2018/01/11 14:34

okrt

総合スコア366

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Hiroyuki_NG

2018/01/13 02:03

仰る通り、私の環境でも「プログラムのアンインストールまたは変更」での表記と一致する情報が取得できませんでした。 教えて頂いたレジストリから取得する方法を試してみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問