社本@元ネオニート Blog

社本@元ネオニート (元々ワック) のいたずら書き (for Programmers)

AILight Banner
AILight Blog

プロフィール

社本@元ネオニート Blog
働いたら負けかなと思っていたのですが。。とうとう働き始めました。アメリカのシアトル・エリアにある企業向けのバックアップソフトを開発している会社です。日本人は私だけ。なんとか。。やっていけてるようです。

目次

Blog 利用状況

記事分類

過去の記事

タグ

Windows Installer のバージョンの取得&バージョン一覧

---
#import 

#if 1
// Windows Installerがインストールされているか?
// NOTE: この関数を使いたい場合、msi.dllを遅延ロードさせる必要がある
static bool IsRuntimeInstalled()
{
// CString strFileName = _T("msi.dll");
 CString strFileName = CMsiHelper::GetSystemDirectory() + _T("msi.dll");
 HMODULE hModule = ::LoadLibrary(strFileName);
 if (hModule == NULL)
 {
  return false;
 }

 ::FreeLibrary(hModule);

 return true;
}
#else
// Windows Installerがインストールされているか?
static bool IsRuntimeInstalled()
{
 HRESULT hr = S_OK;

 WindowsInstaller::InstallerPtr spInstaller;
// hr = spInstaller.CreateInstance(_T("WindowsInstaller.Installer"));
 hr = spInstaller.CreateInstance(_T("{000C1090-0000-0000-C000-000000000046}"));
 if (FAILED(hr))
 {
  return false;
 }

 return true;
}
#endif

#if 1
// Windows Installerのバージョンの取得
// NOTE: この関数を使いたい場合、msi.dllを遅延ロードさせる必要がある
// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/released_versions_of_windows_installer.asp?frame=true
static CString GetRuntimeVersion()
{
 if (!CMsiHelper::IsRuntimeInstalled())
 {
  // インストールされていない
  return _T("");
 }

 // NOTE: フルパスを指定する必要あり
 CString strFileName = CMsiHelper::GetSystemDirectory() + _T("msi.dll");
 TCHAR szVersionBuf[32];
 DWORD dwVersionBuf = sizeof(szVersionBuf);
 UINT nr = ::MsiGetFileVersion(strFileName, szVersionBuf, &dwVersionBuf, NULL, NULL);
 if (nr != ERROR_SUCCESS)
 {
  return _T("");
 }

 return szVersionBuf;
}
#else
// Windows Installerのバージョンの取得
// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/released_versions_of_windows_installer.asp?frame=true
static CString GetRuntimeVersion()
{
 HRESULT hr = S_OK;

 CString strResult;

 try
 {
  WindowsInstaller::InstallerPtr spInstaller;
//  hr = spInstaller.CreateInstance(_T("WindowsInstaller.Installer"));
  hr = spInstaller.CreateInstance(_T("{000C1090-0000-0000-C000-000000000046}"));
  if (FAILED(hr))
  {
   // インストールされていない
   return _T("");
  }

  strResult = (LPCTSTR)spInstaller->Version;
 }
 catch (...)
 {
  return _T("");
 }

 return strResult;
}
#endif
---

Determining the Windows Installer Version
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/determining_the_windows_installer_version.asp?frame=true

Released Versions of Windows Installer
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/released_versions_of_windows_installer.asp?frame=true

投稿日時 : 2005年1月16日 23:54


コメントを追加

#  re: Windows Installer のバージョンの取得&バージョン一覧 2005年1月17日 16:26 渋木宏明(ひどり)

オートメーションする、って手もあるよね。

#  re: Windows Installer のバージョンの取得&バージョン一覧 2005年1月17日 17:02 社本@ワック

> オートメーションする、って手もあるよね。

#else以降に、オートメーション版のコードもありますよ。

#  Windows インストーラーのバージョンチェック 2006年7月12日 1:59 社本@ワック Blog

Windows インストーラーのバージョンチェック
タイトル
名前
URL
コメント