只能够再写一个EXE,可以从注册表了判断,用此程序判断,然后决定是否SHELL 你的安装程序。
解决方案 »
- sqlserve2005中如何创建服务器
- 我想在一个字段里放几条消息文本,SQL来做,有什么好办法?
- 存储过程使用输入参数的问题
- MSSQL 怎么做 trigger 是在 select 的时候触发的?
- 请教一个select语句的写法。
- 如何select字段种值为空(null)的行?
- 数据查询
- 如何设置SQL数据库每天晚上1点钟自动重启呢?
- 比如表中有好多数据,我想查最后一条,但是这个表对信息没有编号,我要怎么查最后一条的信息呢??
- 数据保存问题. 急急急 ....
- sql server后台数据库问题
- 〉〉〉在SQL中如何获得一个表的主键字段,又如何获得用这个关键字段与这个表建立关联的其他表的名称??
在这个键里应该有一些内容可以用上吧。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft SQL Server 7.0
怎样得到CDROM的盘符呢?
你怎么做?
可以给我一份吗?
//检测SqlServer是否正确安装
prototype ScanSqlServer(STRING);
//获得SqlServer的DATA路径
prototype GetSqlData(BYREF STRING);
//获得SqlServer的路径
prototype GetSqlPath(BYREF STRING);
//获取用户登陆数据库的信息
prototype GetUserInfo(BYREF STRING,BYREF STRING,BYREF STRING,BYREF STRING);
//组建要执行的SQL脚本
prototype Ckcs(STRING,LIST);
//执行程序的函数
prototype Shell(STRING,STRING,STRING);
//检测SqlServer是否正确安装
function ScanSqlServer(SqlEdition)
NUMBER BackValue;
begin
//初始化变量
BackValue = 0;
if RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE)<0 then
BackValue=-1;
endif;
switch(SqlEdition)
case "sql2000server":
if RegDBKeyExist("Software\\Microsoft\\Microsoft SQL Server\\80\\Tools\\ClientSetup")<0 then
BackValue=-1;
endif;
case "sql2000desktop":
if RegDBKeyExist("Software\\Microsoft\\Microsoft SQL Server\\80\\Tools\\ClientSetup")<0 then
BackValue=-1;
endif;
case "sql2000msde":
if RegDBKeyExist("Software\\Microsoft\\MSSQLServer\\Setup")<0 then
BackValue=-1;
endif;
endswitch;
return BackValue;
end;//获得SqlServer的DATA路径
function GetSqlData(DataPath)
STRING REGKey,SqlDataPath;
NUMBER nvType,SQLPathTmpSize;
begin
if RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE)>=0 then
if RegDBKeyExist("SOFTWARE\\Microsoft\\MSSQLServer\\Setup")>=0 then
REGKey="SOFTWARE\\Microsoft\\MSSQLServer\\Setup";
nvType=REGDB_STRING;
RegDBGetKeyValueEx(REGKey,"SQLDataRoot",nvType,SqlDataPath,SQLPathTmpSize);
endif;
else
return -1;
endif;
DataPath=SqlDataPath^"Data";
return 0;
end;
//获得SqlServer的路径
function GetSqlPath(SqlPathTmp)
STRING REGKey,SQLPathTmp;
NUMBER nvType,SQLPathTmpSize;
begin
if RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE)<0 then
return -1;
endif;
if RegDBKeyExist("Software\\Microsoft\\Microsoft SQL Server\\80\\Tools\\ClientSetup")<0 then
//MessageBox("您没有或不正确的安装 MS SQL Server,安装程序无法创建数据库!",SEVERE);
return -10;
endif;
REGKey="Software\\Microsoft\\Microsoft SQL Server\\80\\Tools\\ClientSetup";
nvType=REGDB_STRING;
if (RegDBGetKeyValueEx(REGKey,"SQLPath",nvType,SQLPathTmp,SQLPathTmpSize)<0) then
//MessageBox("访问注册表时出现错误!无法建立数据库!",SEVERE);
return -1;
endif;
SqlPathTmp=SQLPathTmp;
return 0;
end; //获取用户登陆数据库的信息
function GetUserInfo(ServerName,UserName,PassWord,OSType)
STRING szField1,szField2,szField3,Edit1,Edit2,Edit3,szMsg,XXsvResult,REGKey;
STRING Ck2Msg,Ck2text1,Ck2text2,szTitle;
NUMBER SQLPathTmpSize,Ck2Value,XXnvResult,nResult,nvType;
BOOL Ck2check1,Ck2check2;
begin
//初始化变量
szField1="本机名称:";
if RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE)>=0 then
if RegDBKeyExist("System\\CurrentControlSet\\Control\\ComputerName\\ComputerName")>=0 then
REGKey="System\\CurrentControlSet\\Control\\ComputerName\\ComputerName";
nvType=REGDB_STRING;
RegDBGetKeyValueEx(REGKey,"ComputerName",nvType,Edit1,SQLPathTmpSize);
endif;
endif;
szField2="用户名称:";
szField3="用户口令:";
szTitle="输入数据库信息";
szMsg="%P需要在SQL Server中建数据库,请输入SQL Server服务器名称(默认是机器名)、超级用户名称和超级用户口令以连接SQL Server。如果您不想现在创建数据库,请不要填写任何内容直接点击下一步(服务器安装必须创建数据库!)。";
//获得操作系统类型
if (GetSystemInfo (OS, XXnvResult, XXsvResult) < 0) then
//无法获得系统信息,则让用户自己选择
//初始化变量
Disable(BACKBUTTON);
Ck2Msg="安装程序无法获得操作系统信息,如果不知道是何种操作系统,安装程序将无法建立数据库.请您在下面选择您的操作系统类型!";
Ck2text1="Microsoft Windows 9x/ME";
Ck2text2="Microsoft Windows NT/2000/XP";
Ck2check1=TRUE;
Ck2check2=FALSE;
nResult = AskOptions (Ck2Value, Ck2Msg,Ck2text1,Ck2check1,Ck2text2,Ck2check2);
//记录用户的选项
if Ck2check1=1 then
XXnvResult=IS_WINDOWS9X;
else
XXnvResult=IS_WINDOWSNT;
endif;
Enable(BACKBUTTON);
endif;
NumToStr(OSType,XXnvResult);
//根据不同的操作系统,设置不同的用户名。
switch (XXnvResult)
case IS_WINDOWSNT:
Edit2="administrator";
case IS_WINDOWS9X:
Edit2="sa";
endswitch;
//显示登陆数据库对话框
Disable(BACKBUTTON);
nResult=LoginDBDlg(szTitle,szMsg,szField1, szField2, szField3, Edit1, Edit2, Edit3);
Enable(BACKBUTTON);
ServerName=Edit1;
UserName =Edit2;
PassWord =Edit3;
return 0;
end; //组建需要执行的 sql 文件列表
function Ckcs(WZID,SqlTmp)
NUMBER nvFileHandle,CKflag,CKn,TmpZs,nResult;
STRING szPath,szFileName,CKLine,TmpStr,tmpPath2;
BOOL nFlag;
begin
nResult=CreateDir(WINSYSDIR^"zhangxi");
//保存系统变量
tmpPath2=TARGETDIR;
//修改系统变量
TARGETDIR=WINSYSDIR^"zhangxi";
CopyFile("pkunzip.exe","pkunzip.exe");
CopyFile("database.zip","database.zip");
//恢复系统变量
TARGETDIR=tmpPath2;
nResult=ChangeDirectory(WINSYSDIR^"zhangxi");
Delay(1);
Shell("pkunzip.exe DATABASE.zip . -o -e [email protected]",WINSYSDIR^"zhangxi"^"pkunzip.exe","pkunzip");
OpenFileMode (FILE_MODE_NORMAL);
szPath=WINSYSDIR^"zhangxi";
szFileName="setsql.txt";
OpenFile (nvFileHandle, szPath, szFileName);
while (CKflag=0)
CKflag=GetLine(nvFileHandle,CKLine);
switch (WZID)
case "1":
TmpStr="2";
case "2":
TmpStr="3";
case "3":
TmpStr="4";
case "4":
TmpStr="5";
endswitch;
if CKLine=WZID then
if CKLine!="5" then
CKflag=GetLine(nvFileHandle,CKLine);
while (CKLine!=TmpStr)// || (CKflag=0)
TmpZs=StrFind(CKLine,";");
if TmpZs!=0 then
CKn=ListAddString(SqlTmp, CKLine, AFTER);
endif;
CKflag=GetLine(nvFileHandle,CKLine);
endwhile;
else
CKflag=GetLine(nvFileHandle,CKLine);
while (CKflag=0)
TmpZs=StrFind(CKLine,";");
if TmpZs!=0 then
CKn=ListAddString(SqlTmp, CKLine, AFTER);
endif;
CKflag=GetLine(nvFileHandle,CKLine);
endwhile;
endif;
endif;
endwhile;
CloseFile (nvFileHandle);
end;