您的位置:首页 > 数据库 > Oracle

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

2008-06-23 13:01 501 查看
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;

*/

}
下载请到我的网络硬盘。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息