怎样在程序开始之前启动Interbase服务,在程序关闭时也关闭Interbase服务?

TourAn 2003-05-12 03:20:53
怎样在程序开始之前启动Interbase服务,在程序关闭时也关闭Interbase服务?

客户这样要求,真tmd没有办法 :(
...全文
242 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxy6080 2003-06-17
  • 打赏
  • 举报
回复
gz
Acquarius 2003-05-20
  • 打赏
  • 举报
回复
承蒙楼上夸奖。
chngoing 2003-05-20
  • 打赏
  • 举报
回复
你想法是不错,不过最好还能在系统托盘中隐藏ib server的图标,而且在进程管理器中隐藏ib server 的进程。
Acquarius 2003-05-20
  • 打赏
  • 举报
回复
启动代码如上。
Acquarius 2003-05-20
  • 打赏
  • 举报
回复
String __fastcall TMainForm::GetIBRootDir()
{
String Res;
TRegistry *R=new TRegistry();

R->RootKey=HKEY_LOCAL_MACHINE;
if(R->OpenKey("\Software\Borland\Interbase\CurrentVersion", false))
Res=R->ReadString("RootDirectory");
else
Res="";

delete R;
return Res;
}
Acquarius 2003-05-20
  • 打赏
  • 举报
回复
呵呵。其实我也不是想要分,不过这个问题确实太难了。我先把启动服务的代码给你:

void __fastcall TMainForm::StartIB()
{
String PathToGuardian;
HINSTANCE Res;
SC_HANDLE ServiceHandle;

if(Win32Platform==VER_PLATFORM_WIN32_NT) //NT/XP Platform
{
ServiceHandle=GetIBHandle();
if(ServiceHandle==NULL) //fatal error, cannot get service handle
Application->Terminate();

if(!StartService (ServiceHandle, 0, NULL))
{
ShowMessage("Service start error: "+GetErrorMsg());
//error: cannot start service, maybe already running?
}
}
else // Win9X platform
{
PathToGuardian=GetIBDir()+"ibguard.exe";
Res=ShellExecute(this->Handle,NULL, PathToGuardian.c_str(), "", GetIBRootDir().c_str(), SW_NORMAL);
if((int)Res<=32)
ShowMessage("Unable to start IB server!");
}
}
//---------------------------------------------------------------------------

SC_HANDLE __fastcall TMainForm::GetIBHandle()
{
SC_HANDLE SCMHandle;
SC_HANDLE Res=NULL;

SCMHandle=OpenSCManager(NULL, NULL, GENERIC_EXECUTE);
if(SCMHandle==NULL)
{
ShowMessage("SCM Error: "+GetErrorMsg());
}
else
{
Res=OpenService(SCMHandle, "InterBaseGuardian", SERVICE_ALL_ACCESS);
if(Res==NULL)
{
ShowMessage("Service open error: "+GetErrorMsg());
}
}

return Res;
}

String __fastcall TMainForm::GetIBDir()
{
TRegistry *R=new TRegistry();
String Res;

R->RootKey=HKEY_LOCAL_MACHINE;
if(R->OpenKey("\Software\Borland\Interbase\CurrentVersion", false))
Res=R->ReadString("ServerDirectory");
else
Res="";

delete R;
return Res;
}
erickleung 2003-05-19
  • 打赏
  • 举报
回复
FB 1.5新加入了embedded firebird, 你的程式可以直接使用其 700K的fbembedd.dll来连上本地数据库. 相信会是最方便的方式.
TourAn 2003-05-18
  • 打赏
  • 举报
回复
Acquarius(大管家)

分不够可以再加!!!
耙子 2003-05-13
  • 打赏
  • 举报
回复
看看 FAQ,类似的问题我问过。
Acquarius 2003-05-12
  • 打赏
  • 举报
回复
你需要用API调用并根据不同的操作系统进行操作,不过20分太少。

2,209

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 其他数据库
社区管理员
  • 其他数据库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧