visual C++ 2005 Express Platform SDK設定プログラム

icon 項目のみ表示/展開表示の切り替え

概要

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