#include <windows.h>
// すでに SQL Server がインストールされているか?(SQL ServerのインスタンスIDがレジストリに存在するかで判断)
BOOL IsInstalledSQLServer ()
{
BOOL bResult = FALSE;
// レジストリのサブキーを開く
HKEY hKey;
const char cszSubKey[] = "SOFTWARE\\Microsoft\\Microsoft SQL Server";
if ( ERROR_SUCCESS == RegOpenKeyEx ( HKEY_LOCAL_MACHINE, cszSubKey, 0, KEY_READ, &hKey ) )
{
// レジストリの値のサイズを取得
DWORD dwSize;
DWORD dwType = REG_MULTI_SZ;
const char cszValueName[] = "InstalledInstances";
if ( ERROR_SUCCESS == RegQueryValueEx ( hKey, cszValueName, NULL, &dwType, NULL, &dwSize ) )
{
// サイズ分メモリを確保
BYTE *pacValue = new BYTE[ dwSize ];
// 読み込み(中身の確認はしないが読み込めた場合何かしらのバージョンのSQL Serverがインストール済み
if ( ERROR_SUCCESS == RegQueryValueEx ( hKey, cszValueName, NULL, &dwType, pacValue, &dwSize ) )
{
// SQL Server のインスタンスIDが存在するので、SQL Serverはインストールされていると判断
bResult = TRUE;
}
// メモリを解放
delete[] pacValue;
}
// サブキーを閉じる
RegCloseKey ( hKey );
}
return bResult;
}
int WINAPI WinMain ( HINSTANCE hThisInstance,
HINSTANCE,
char *,
int )
{
// SQL Server がすでにインストールされているか確認
if ( IsInstalledSQLServer () )
{
MessageBox ( NULL, "SQL Serverはインストールされています。", "確認", MB_SYSTEMMODAL | MB_OK );
}
else
{
MessageBox ( NULL, "SQL Serverはインストールされていません。", "確認", MB_SYSTEMMODAL | MB_OK );
}
return 0;
}
|