int get_app_path(char *path)
{
char buff[MAX_PATH];
memset(buff, 0, sizeof(buff));
if (GetModuleFileName(NULL, buff, MAX_PATH) == 0)
{
return -1;
}
memcpy(path, buff, strlen(buff));
return 0;
}
int reg_ora_client(const char *path)
{
HKEY hreg;
char dir[MAX_PATH];
char paths[4096];
unsigned long size, len;
if (path == NULL || (len = strlen(path)) < 2)
{
return -1;
}
len --;
memset(dir, 0, sizeof(dir));
strcpy(dir, path);
while (dir[len] == '\\')
{
dir[len --] = 0;
}
if(RegOpenKey(HKEY_LOCAL_MACHINE, \
"SYSTEM\\ControlSet001\\Control\\Session Manager\\Environment", \
&hreg) != ERROR_SUCCESS)
{
fprintf(stderr, "设置ORACLE环境 --- 无法打开键!\n");
return -1;
}
if (RegSetValueEx(hreg, "TNS_ADMIN", 0, REG_SZ, \
(const unsigned char *)dir, strlen(dir)) != ERROR_SUCCESS)
{
fprintf(stderr, "设置ORACLE环境 --- 无法设置TNS_ADMIN!\n");
RegCloseKey(hreg);
return -1;
}
size = 4096;
memset(paths, 0, sizeof(paths));
if (RegQueryValueEx(hreg, "PATH", NULL, NULL, (unsigned char *)paths, &size) != ERROR_SUCCESS)
{
RegCloseKey(hreg);
return -1;
}
if (stristr(paths, dir) == NULL)
{
len = strlen(paths);
if (paths[-- len] != ';')
{
strcat(paths, ";");
}
strcat(paths, dir);
if (RegSetValueEx(hreg, "PATH", 0, REG_EXPAND_SZ, \
(const unsigned char *)paths, strlen(paths)) != ERROR_SUCCESS)
{
fprintf(stderr, "设置ORACLE环境 --- 无法设置PATH!\n");
RegCloseKey(hreg);
return -1;
}
}
if (RegSetValueEx(hreg, "NLS_LANG", 0, REG_SZ, \
(const unsigned char *)"SIMPLIFIED CHINESE_CHINA.ZHS16GBK", 33) != ERROR_SUCCESS)
{
fprintf(stderr, "设置ORACLE环境 --- 无法设置NLS_LANG!\n");
RegCloseKey(hreg);
return -1;
}
RegCloseKey(hreg);
return 0;
}
int rdb_init()
{
char dir[MAX_PATH];
char *p;
memset(dir, 0, sizeof(dir));
if (get_app_path(dir) == -1)
{
return -1;
}
if ((p = strrchr(dir, '\\')) == NULL)
{
return -1;
}
memset(p, 0, sizeof(dir) - (p - dir));
if (reg_ora_client(dir) == -1)
{
return -1;
}
return 0;
}
{
char buff[MAX_PATH];
memset(buff, 0, sizeof(buff));
if (GetModuleFileName(NULL, buff, MAX_PATH) == 0)
{
return -1;
}
memcpy(path, buff, strlen(buff));
return 0;
}
int reg_ora_client(const char *path)
{
HKEY hreg;
char dir[MAX_PATH];
char paths[4096];
unsigned long size, len;
if (path == NULL || (len = strlen(path)) < 2)
{
return -1;
}
len --;
memset(dir, 0, sizeof(dir));
strcpy(dir, path);
while (dir[len] == '\\')
{
dir[len --] = 0;
}
if(RegOpenKey(HKEY_LOCAL_MACHINE, \
"SYSTEM\\ControlSet001\\Control\\Session Manager\\Environment", \
&hreg) != ERROR_SUCCESS)
{
fprintf(stderr, "设置ORACLE环境 --- 无法打开键!\n");
return -1;
}
if (RegSetValueEx(hreg, "TNS_ADMIN", 0, REG_SZ, \
(const unsigned char *)dir, strlen(dir)) != ERROR_SUCCESS)
{
fprintf(stderr, "设置ORACLE环境 --- 无法设置TNS_ADMIN!\n");
RegCloseKey(hreg);
return -1;
}
size = 4096;
memset(paths, 0, sizeof(paths));
if (RegQueryValueEx(hreg, "PATH", NULL, NULL, (unsigned char *)paths, &size) != ERROR_SUCCESS)
{
RegCloseKey(hreg);
return -1;
}
if (stristr(paths, dir) == NULL)
{
len = strlen(paths);
if (paths[-- len] != ';')
{
strcat(paths, ";");
}
strcat(paths, dir);
if (RegSetValueEx(hreg, "PATH", 0, REG_EXPAND_SZ, \
(const unsigned char *)paths, strlen(paths)) != ERROR_SUCCESS)
{
fprintf(stderr, "设置ORACLE环境 --- 无法设置PATH!\n");
RegCloseKey(hreg);
return -1;
}
}
if (RegSetValueEx(hreg, "NLS_LANG", 0, REG_SZ, \
(const unsigned char *)"SIMPLIFIED CHINESE_CHINA.ZHS16GBK", 33) != ERROR_SUCCESS)
{
fprintf(stderr, "设置ORACLE环境 --- 无法设置NLS_LANG!\n");
RegCloseKey(hreg);
return -1;
}
RegCloseKey(hreg);
return 0;
}
int rdb_init()
{
char dir[MAX_PATH];
char *p;
memset(dir, 0, sizeof(dir));
if (get_app_path(dir) == -1)
{
return -1;
}
if ((p = strrchr(dir, '\\')) == NULL)
{
return -1;
}
memset(p, 0, sizeof(dir) - (p - dir));
if (reg_ora_client(dir) == -1)
{
return -1;
}
return 0;
}