名前 題名 ▼ Mr.XRAYさん > > インストール済みの .NET Framework のバージョンは > > ものはついでですので,Windows API を使用したコードです. > JEDI の Windows API のユニットを使用しています. > > うまくいったと思ったら,検出できないバージョンがあります. > WMI を使用したのも,このサンプルも MSI でインストールしたアプリです. > そのあたりが誓うのかも... > WMI とこのサンプルの動作確認は Windows 7 U64(SP1) + Delphi XE(UP1) Pro です. > > > implementation > > uses > JwaMsi, > StrUtils; > > {$R *.dfm} > > //----------------------------------------------------------------------------- > // MSIでインストールしたアプリのプロパティの取得 > // AProduct : インストールしたアプリのプロダクト名(GUID) > // AProperty : 取得したいプロパティの識別子 > // 識別子の名前はMSDNのMsiGetProductInfo関数の説明を参照 > //----------------------------------------------------------------------------- > function GetMsiPropertyValueStr(AProduct: PChar; AProperty: PChar): string; > var > LValue : PChar; > LLen : DWORD; > begin > //取得に必要なバッファサイズを取得(第3引数をnilにする) > LLen := 0; > MsiGetProductInfo(AProduct, AProperty, nil, @LLen); > > //取得したバッファサイズにnul終端文字分が含まれないとのことなで追加 > LLen := LLen + 1; > LValue := StrAlloc(LLen); > try > MsiGetProductInfo(AProduct, AProperty, LValue, @LLen); > Result := LValue; > finally > StrDispose(LValue); > end; > end; > > //============================================================================= > // MSIでインストールしたアプリをリスト > //============================================================================= > procedure TForm1.Button1Click(Sender: TObject); > var > LIndex : Integer; > LProduct : PChar; > LText : string; > begin > Memo1.Lines.Clear; > Memo1.Lines.BeginUpdate; > > LIndex := 0; > LProduct := StrAlloc(MAX_PATH); > try > while MsiEnumProducts(LIndex, LProduct) = ERROR_SUCCESS do begin > LText := GetMsiPropertyValueStr(LProduct, INSTALLPROPERTY_PRODUCTNAME); > > if StrUtils.ContainsText(LText, 'NET Framework') then begin > Memo1.Lines.Add(string(LProduct)); > Memo1.Lines.Add(IntToStr(LIndex) + ' '+ LText); > > LText := GetMsiPropertyValueStr(LProduct, INSTALLPROPERTY_VERSIONSTRING); > Memo1.Lines.Add(IntToStr(LIndex) + ' '+ LText); > Memo1.Lines.Add(''); > end; > > inc(LIndex); > end; > finally > StrDispose(LProduct); > end; > > Memo1.Lines.EndUpdate; > end; > GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link