概要

Visual C++ 2005 Expressは無料で使えるアプリケーション開発ソフトですが、Windowsアプリケーションを使うためには、Platform SDKをインストールし、幾つかの設定ファイルを自力で修正する必要があります。このソフトは、設定ファイルを自動的に修正します。
なお、Visual C++ 2005 ExpressとPlatform SDKは、Windowsがインストールされているドライブと同一である必要があります。

使い方

特に初期設定が必要ないためインストーラをありません。
Visual C++ 2005 Express  (http://www.microsoft.com/japan/msdn/vstudio/express/visualc/) と
Platform SDK (http://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&displaylang=en) をインストール後に、
本ソフトの圧縮ファイルを任意のフォルダーに解凍しその中のvc2005inst.exeを実行してください。
Visual C++ 2005 Express と Platform SDKはisoファイルで供給されているため、CD-Rに焼くかalcohol(http://www.free-downloads.net/programs/Alcohol_52__Free_Edition)などの仮想CDソフトを用いてマウントします。
本ソフトを用いずに設定ファイルを修正するには、下記のサイトを参考にしてください。
Visual C++ 2005 Express Edition と Microsoft Platform SDK を一緒に使う http://www.microsoft.com/japan/msdn/vstudio/express/visualc/usingpsdk/
本ソフトでは、手順3から手順5までを自動化しています。

ソース・実行ファイルのダウンロード

ソースファイル等

コンパイルする場合は、DLLを使わない設定にしてください。(Visual C++ 2005 Expressがインストールされていない環境で実行する必要があるため。)

vc2005inst.cpp

#include <windows.h>
#include <shlobj.h>
#include <stdio.h>
#include <tchar.h>

void swap_file(TCHAR* dtc,TCHAR* src);

int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPreInst,TCHAR* lpszCmdLine, int nCmdShow){

	TCHAR psdk_pass[MAX_PATH];
	TCHAR vc8_pass[MAX_PATH];
	TCHAR src_pass[MAX_PATH];
	TCHAR dtc_pass[MAX_PATH];
	TCHAR buf[512];	//	ファイル入力バッファ

	FILE* src_fp;
	FILE* dtc_fp;

	if(SHGetFolderPath(0,CSIDL_PROGRAM_FILES ,0,SHGFP_TYPE_CURRENT,psdk_pass)==0){
		_tcscpy_s(vc8_pass,sizeof(vc8_pass)/sizeof(TCHAR),psdk_pass);
		_tcscat_s(psdk_pass,sizeof(psdk_pass)/sizeof(TCHAR),TEXT("\\Microsoft Platform SDK"));
		_tcscat_s(vc8_pass,sizeof(vc8_pass)/sizeof(TCHAR),TEXT("\\Microsoft Visual Studio 8"));
		
//		vc\vcpackages\VCProjectEngine.dll.express.configを修正


		_stprintf_s(src_pass,sizeof(src_pass)/sizeof(TCHAR),TEXT("%s\\vc\\vcpackages\\VCProjectEngine.dll.express.config"),vc8_pass);
		_stprintf_s(dtc_pass,sizeof(dtc_pass)/sizeof(TCHAR),TEXT("%s\\vc\\vcpackages\\VCProjectEngine.dll.express.config.bak"),vc8_pass);

		if(_tfopen_s(&src_fp,src_pass,TEXT("r"))){
			MessageBox(0,TEXT("VCProjectEngine.dll.express.configファイルを開けませんでした。\nVisual C++ 2005 Expressが正常にインストールされていないか、違うドライブにインストールされている可能性があります。"),TEXT("エラー"),MB_OK);
			return 1;
		}
		_tfopen_s(&dtc_fp,dtc_pass,TEXT("w"));
		while(_fgetts(buf,sizeof(buf)/sizeof(TCHAR),src_fp)){
			TCHAR* p;

			if((p=_tcsstr(buf,TEXT("Include=\""))) != 0){
				TCHAR* t;
				if((t=_tcsstr(p,TEXT("Program Files\\Microsoft Platform SDK\\include"))) != 0){
					MessageBox(0,TEXT("すでにVCProjectEngine.dll.express.configが変更されています"),TEXT("エラー"),MB_OK);
					return 2;
				}else{
					buf[ _tcslen(buf) -2 ] = _T('\0');
					_ftprintf_s(dtc_fp,TEXT("%s;%s\\include\"\n"),buf,psdk_pass);
				}
			}else 	if((p=_tcsstr(buf,TEXT("Library=\""))) != 0){
				TCHAR* t;
				if((t=_tcsstr(p,TEXT("Program Files\\Microsoft Platform SDK\\lib"))) != 0){
					MessageBox(0,TEXT("すでにVCProjectEngine.dll.express.configが変更されています"),TEXT("エラー"),MB_OK);
					return 2;
				}else{
					buf[ _tcslen(buf) -2 ] = _T('\0');
					_ftprintf_s(dtc_fp,TEXT("%s;%s\\lib\"\n"),buf,psdk_pass);
				}
			}else 	if((p=_tcsstr(buf,TEXT("Path=\""))) != 0){
				TCHAR* t;
				if((t=_tcsstr(p,TEXT("Program Files\\Microsoft Platform SDK\\bin"))) != 0){
					MessageBox(0,TEXT("すでにVCProjectEngine.dll.express.configが変更されています"),TEXT("エラー"),MB_OK);
					return 2;
				}else{
					buf[ _tcslen(buf) -2 ] = _T('\0');
					_ftprintf_s(dtc_fp,TEXT("%s;%s\\bin\"\n"),buf,psdk_pass);
				}
			}else
				_fputts(buf,dtc_fp);
		}

		fclose(src_fp);
		fclose(dtc_fp);

		swap_file(src_pass,dtc_pass);

//		VC\VCProjectDefaults\corewin_express.vspropsを修正



		_stprintf_s(src_pass,sizeof(src_pass)/sizeof(TCHAR),TEXT("%s\\VC\\VCProjectDefaults\\corewin_express.vsprops"),vc8_pass);
		_stprintf_s(dtc_pass,sizeof(dtc_pass)/sizeof(TCHAR),TEXT("%s\\VC\\VCProjectDefaults\\corewin_express.vsprops.bak"),vc8_pass);
		if(_tfopen_s(&src_fp,src_pass,TEXT("r"))){
			MessageBox(0,TEXT("corewin_express.vspropsファイルを開けませんでした。\nVisual C++ 2005 Expressが正常にインストールされていないか、違うドライブにインストールされている可能性があります。"),TEXT("エラー"),MB_OK);
			return 1;
		}
		_tfopen_s(&dtc_fp,dtc_pass,TEXT("w"));
		while(_fgetts(buf,sizeof(buf)/sizeof(TCHAR),src_fp)){
			TCHAR* p;

			if((p=_tcsstr(buf,TEXT("AdditionalDependencies=\"kernel32.lib\" />"))) != 0){
				TCHAR* t;
				if((t=_tcsstr(p,TEXT("user32.lib"))) != 0){
					MessageBox(0,TEXT("すでにcorewin_express.vspropsが変更されています"),TEXT("エラー"),MB_OK);
					return 2;
				}else{
					buf[ _tcslen(buf) -5 ] = _T('\0');
					_tcscat_s(buf,sizeof(buf)/sizeof(TCHAR),TEXT(" user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib\" />\n"));
				}
			}
			_fputts(buf,dtc_fp);
		}

		fclose(src_fp);
		fclose(dtc_fp);
		swap_file(src_pass,dtc_pass);




//		\VC\VCWizards\AppWiz\Generic\Application\html\1041\AppSettings.htm を修正

		_stprintf_s(src_pass,sizeof(src_pass)/sizeof(TCHAR),TEXT("%s\\VC\\VCWizards\\AppWiz\\Generic\\Application\\html\\1041\\AppSettings.htm"),vc8_pass);
		_stprintf_s(dtc_pass,sizeof(src_pass)/sizeof(TCHAR),TEXT("%s\\VC\\VCWizards\\AppWiz\\Generic\\Application\\html\\1041\\AppSettings.htm.bak"),vc8_pass);
		if(_tfopen_s(&src_fp,src_pass,TEXT("r"))){
			MessageBox(0,TEXT("AppSettings.htmファイルを開けませんでした。\nVisual C++ 2005 Expressが正常にインストールされていないか、違うドライブにインストールされている可能性があります。"),TEXT("エラー"),MB_OK);
			return 1;
		}
		int f=0;
		_tfopen_s(&dtc_fp,dtc_pass,TEXT("w"));
		while(_fgetts(buf,sizeof(buf)/sizeof(TCHAR),src_fp)){
			TCHAR* p;


			if(_tcsstr(buf,TEXT("window.external.FindSymbol(\"IS_EXPRESS_SKU\")"))){
				f=1;
			}
			if(f){
				if((p=_tcsstr(buf,TEXT("WIN_APP.disabled = true;"))) != 0){
					if(buf+2 != p){
						MessageBox(0,TEXT("すでにAppSettings.htmが変更されています"),TEXT("エラー"),MB_OK);
						return 2;
					}else{
						_ftprintf(dtc_fp,TEXT("//"));
					}
				}

				if((p=_tcsstr(buf,TEXT("WIN_APP_LABEL.disabled = true;"))) != 0){
					if(buf+2 != p){
						MessageBox(0,TEXT("すでにAppSettings.htmが変更されています"),TEXT("エラー"),MB_OK);
						return 2;
					}else{
						_ftprintf(dtc_fp,TEXT("//"));
					}
				}
				if((p=_tcsstr(buf,TEXT("DLL_APP.disabled = true;"))) != 0){
					if(buf+2 != p){
						MessageBox(0,TEXT("すでにAppSettings.htmが変更されています"),TEXT("エラー"),MB_OK);
						return 2;
					}else{
						_ftprintf(dtc_fp,TEXT("//"));
					}
				}
				if((p=_tcsstr(buf,TEXT("DLL_APP_LABEL.disabled = true;"))) != 0){
					if(buf+2 != p){
						MessageBox(0,TEXT("すでにAppSettings.htmが変更されています"),TEXT("エラー"),MB_OK);
						return 2;
					}else{
						_ftprintf(dtc_fp,TEXT("//"));
					}
				}

			}
			_fputts(buf,dtc_fp);
		}

		fclose(src_fp);
		fclose(dtc_fp);

		swap_file(src_pass,dtc_pass);

		MessageBox(0,TEXT("正常に設定されました。"),TEXT("メッセージ"),MB_OK);
	}
	return 0;
}

//	ファイルの中身を交換する。

void swap_file(TCHAR* dtc,TCHAR* src){
	TCHAR temp[MAX_PATH];
	_stprintf_s(temp,sizeof(temp)/sizeof(TCHAR),TEXT("%s$$$$"),dtc);
	MoveFile(dtc,temp);
	MoveFile(src,dtc);
	MoveFile(temp,src);
}

resource.h

#define APL_NAME "Visual C++ 2005 Express Platform SDK設定プログラム"
#define APL_NAME0 "Visual C++ 2005 Express Platform SDK設定プログラム"
#define FILE_VERSION 1,0,0,0
#define VERSION_NUMBER 	"1, 0, 0, 0"
#define VERSION_NUMBER0 "1, 0, 0, 0\0"
#define COPYRIGHT "Copyright (C) 2007/11/24"
#define COPYRIGHT0 "Copyright (C) 2007/11/24\0"
#define DESCRIPTION  "山忠ソフト"
#define DESCRIPTION0  "山忠ソフト\0"
#define APL_VER	"Visual C++ 2005 Express Platform SDK設定プログラム  Version  1, 0, 0, 0"

resource.rc

#include <windows.h>
#include "resource.h"


//--------------------
//  ヴァージョン情報
//--------------------

VS_VERSION_INFO VERSIONINFO
 FILEVERSION FILE_VERSION
 PRODUCTVERSION FILE_VERSION
 FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
 FILEFLAGS 0x1L
#else
 FILEFLAGS 0x0L
#endif
 FILEOS 0x4L
 FILETYPE 0x1L
 FILESUBTYPE 0x0L
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904b0"
        BEGIN
            VALUE "Comments", "Visual C++ 2005 Express Platform SDK設定プログラム\0"
            VALUE "CompanyName",DESCRIPTION0
            VALUE "FileDescription", "Visual C++ 2005 Express Platform SDK設定プログラム\0"
            VALUE "FileVersion", VERSION_NUMBER0 
            VALUE "InternalName", "\0"
            VALUE "LegalCopyright", COPYRIGHT0
            VALUE "OriginalFilename", "vc2005inst.exe\0"
            VALUE "ProductName", APL_NAME0
            VALUE "ProductVersion",  VERSION_NUMBER0 
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation",0x0411, 0x03A4 
    END
END