`

用VC给Oracle的即时客户端(InstanceClient)写个安装设置程序

阅读更多

Oracle 出了个即时客户端,设置三个环境变量就可以用了,也不大。

为了更加方便使用,我写了个程序,放在即时客户端目录里,运行一下就把三个环境变量设好了。很方便。

程序也不难,核心代码贴一下。

// OraSetup.cpp : 定义应用程序的类行为。

//



#include "stdafx.h"

#include "OraSetup.h"

#include "OraSetupDlg.h"



#ifdef _DEBUG

#define new DEBUG_NEW

#endif





// COraSetupApp



BEGIN_MESSAGE_MAP(COraSetupApp, CWinApp)

	ON_COMMAND(ID_HELP, &CWinApp::OnHelp)

END_MESSAGE_MAP()





// COraSetupApp 构造



COraSetupApp::COraSetupApp()

{

	// TODO: 在此处添加构造代码,

	// 将所有重要的初始化放置在 InitInstance 中

}





// 唯一的一个 COraSetupApp 对象



COraSetupApp theApp;

CString COraSetupApp::GetMyPath()

{

	CString strPath;

	GetModuleFileName(NULL,strPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);

	strPath.ReleaseBuffer();

	return strPath;

}

BOOL COraSetupApp::SetEnv(CString key,CString value,BOOL bAppend)

{

	HKEY hRegKey;

	BOOL bResult=FALSE;

	CString str=_T("SYSTEM\\ControlSet001\\Control\\Session Manager\\Environment");

	if(::RegOpenKey(HKEY_LOCAL_MACHINE, str, &hRegKey) != ERROR_SUCCESS) 

		bResult=FALSE;

	else

	{

		if(bAppend){

			CString oldValue=_T("");

			DWORD size;

			::RegQueryValueEx(hRegKey,key,NULL,NULL,(BYTE *)oldValue.GetBuffer(1024),&size);

			oldValue.ReleaseBuffer();

			if(oldValue.Find(value)!=-1){

				//已经写过

				return TRUE;

			}

			value = value+_T(";")+oldValue;

		}

		bResult=(::RegSetValueEx( hRegKey,

			key,

			0,

			REG_SZ,

			(CONST BYTE *)value.GetBuffer(0),

			value.GetLength()*sizeof(TCHAR) ) != ERROR_SUCCESS);

	}		

	return bResult;

}



// COraSetupApp 初始化



BOOL COraSetupApp::InitInstance()

{

	// 如果一个运行在 Windows XP 上的应用程序清单指定要

	// 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,

	//则需要 InitCommonControlsEx()。否则,将无法创建窗口。

	INITCOMMONCONTROLSEX InitCtrls;

	InitCtrls.dwSize = sizeof(InitCtrls);

	// 将它设置为包括所有要在应用程序中使用的

	// 公共控件类。

	InitCtrls.dwICC = ICC_WIN95_CLASSES;

	InitCommonControlsEx(&InitCtrls);



	CWinApp::InitInstance();



	// 标准初始化

	// 如果未使用这些功能并希望减小

	// 最终可执行文件的大小,则应移除下列

	// 不需要的特定初始化例程

	// 更改用于存储设置的注册表项

	// TODO: 应适当修改该字符串,

	// 例如修改为公司或组织名

	SetRegistryKey(_T("应用程序向导生成的本地应用程序"));



	CString path = GetMyPath();

	TCHAR driver[255],dir[255];



	_tsplitpath(path.GetBuffer(0),driver,dir,NULL,NULL);

	path.ReleaseBuffer();



	//去年最后的

	//我看人家的都不放



	path = driver;

	path += dir;

	path = path.TrimRight(_T("\\"));



	SetEnv(_T("TNS_ADMIN"), path);

	SetEnv(_T("Path"), path,TRUE);

	SetEnv(_T("NLS_LANG"), _T("SIMPLIFIED CHINESE_CHINA.ZHS16GBK"));



	return FALSE;

	/*

	COraSetupDlg dlg;

	m_pMainWnd = &dlg;

	INT_PTR nResponse = dlg.DoModal();

	if (nResponse == IDOK)

	{

	// TODO: 在此处放置处理何时用“确定”来关闭

	//  对话框的代码

	}

	else if (nResponse == IDCANCEL)

	{

	// TODO: 在此放置处理何时用“取消”来关闭

	//  对话框的代码

	}



	// 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,

	//  而不是启动应用程序的消息泵。

	return FALSE;

	*/

}
下载请到我的网络硬盘。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics