TAG:
我现在的做法是读注册表 HKEY_LOCAL_MACHINE\\SOFTWARE\\\\Microsoft\\MSSQLServer\\MSSQLServer","Defaultdomain",一般情况下就是本机名,但在域环境下,有时会不一致。 这倒在其次,我最想知道的是如何判断某个具体指定的数据库是否已安装,帮助里有MSIHANDLE MsiGetActiveDatabase( MSIHANDLE hInstall);等例子,但一直不知道怎么得到这个hInstall。请高手指点。另外,哪儿有installshield developer8的书籍,到海淀图书城也没找到。我手头原有本2000的,差别较大,现在这本也不见了,真是两眼一摸黑。 有很多东西不能等着别人一个case一个case的写在书上等你去看。平时多关注各个方面的知识,拓展知识面,解决问题需要综合技能和综合知识的。 如果仅仅是判断一下数据库是否有效等,ADODB等连接一下就知道了——做一个错误陷阱,如果出现错误,根据错误结果判断一下,究竟是用户验证错误还是该服务器不存在。如果想知道SQLServer里都有哪些库,通过SQLServer的存储过程,或者对系统表查询就知道了。如果还想知道更多,SQLServer提供了DMO数据库管理对象,可以做出像企业管理器那样的功能。 那么,现在问题就变成为:InstallShield 的脚本里如何调用组件? g_szDBServer = "jacky"; g_szDBUser = "sa"; g_szDBPwd = "jackie"; nResult = TestConnection(); if(nResult>=0) then MessageBox("",INFORMATION); else if AskYesNo ( g_szDBServer + " does not exist. Enter another path?", YES )=YES then endif; endif; function TestConnection() OBJECT oConn; STRING szConn; NUMBER nResult; begin szConn = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID="+ g_szDBUser +";Initial Catalog=UARG2;Data Source="+ g_szDBServer +";Password="+g_szDBPwd; set oConn= CreateObject("ADODB.Connection"); // use the object try nResult = oConn.Open(szConn); catch /* Exception handler. */ nResult = Err.Number; /* Handle the exception based on its cause. */ /* switch (nResult) case ERR_NOT_EXIST: if AskYesNo ( g_szDBServer + " does not exist. Enter another path?", YES )=YES then endif; case ERR_NO_INFO: MessageBox ( "Could not get size of " + g_szDBServer, INFORMATION ); endswitch; */ endcatch; // free the object set oConn = NOTHING; return nResult; end; (UniSVR) |