Installshield 关于SQL的脚本

 

一、进程控制 

强行结束进程 

prototype POINTER KERNEL32.GlobalLock(POINTER);
prototype BOOL KERNEL32.GlobalUnlock(POINTER);
prototype INT KERNEL32.GlobalFree(POINTER);
prototype INT KERNEL32.GlobalAlloc(INT, INT);  

  

prototype LONG user32.GetWindowThreadProcessId(HWND, POINTER);    
prototype LONG KERNEL32.TerminateProcess(HWND, INT);
prototype LONG KERNEL32.OpenProcess(INT, BOOL, INT);

  

//强行结束进程

prototype KillProcess(HWND);//窗口句柄

function KillProcess(hWnd)

       POINTER pPid;

      int result;

      POINTER hg; 

      HWND ps;

begin                     

      hg = GlobalAlloc(8192, 32);

       pPid = GlobalLock(hg);

       result = GetWindowThreadProcessId(hWnd, pPid);

       if result then

              ps = OpenProcess(1, FALSE, *pPid);

              TerminateProcess(ps, -9);

              GlobalUnlock(hg);

              GlobalFree(hg);

  

 

       endif;    

end;

二、系统信息

1、检测操作系统版本 

 

prototype CheckOSVersion();        //当前操作系统版本(针对9X)

                                   //返回TRUE,FALSE(低于win98第二版)   

function CheckOSVersion()

    STRING svResult;

    NUMBER nOSVersion, nvOS;

begin

    if (GetSystemInfo ( OS , nvOS , svResult )!= 0) then    

        return FALSE;

    endif;

    if nvOS == IS_WINDOWS9X then

       GetSystemInfo ( OSMAJOR , nOSVersion , svResult );

       if nOSVersion < 10 then

           return FALSE;

       endif;   

    endif;

    return TRUE;  

    

end;     

  

 

2、检测程序是否运行,并且关闭 

 

prototype CheckProgramRun(STRING); //检查程序是否在运行                      

                                   //返回0没有运行,1正在运行

  

 

function CheckProgramRun(szProgName) INT nRet; 

    HWND nHwnd; 

  

 

begin           

  

    if (szProgName == "") then

           nRet = 0;

           return nRet;

    endif;

    //得到句柄

    nHwnd = FindWindow("", szProgName);

    if nHwnd != NULL then

        nRet = 1;   

        /发消息关闭程序       

        SendMessage (nHwnd, WM_SYSCOMMAND, SC_CLOSE, 0);

    else 

        nRet = 0;

    endif;

    return nRet;

end;

三、安装坏境

1、设置桌面面背景 

 

prototype SetDesktop(STRING);         

function SetDesktop(szPath)

       STRING szKey;

begin

      szKey = "\\Control Panel\\Desktop";

         RegDBSetDefaultRoot(HKEY_CURRENT_USER);     

  

      if (RegDBCreateKeyEx (szKey, "Wallpaper") >= 0) then

           if RegDBSetKeyValueEx (szKey, "Wallpaper", REGDB_STRING, szPath, -1) < 0 then

           //WallpaperStyle  0default ,1平铺,2拉伸

               return -1; 

           endif;     

    endif;   

    szKey = "\\Software\\Microsoft\\Internet Explorer\\Desktop\\General";

     if RegDBSetKeyValueEx (szKey, "Wallpaper", REGDB_STRING, szPath, -1) < 0 then

         return -1; 

     endif;     

     if RegDBSetKeyValueEx (szKey, "BackupWallpaper", REGDB_STRING, szPath, -1) < 0 then

            return -1;

    endif;   

end;

  

 

2、设置屏幕保护 

 

prototype SetScreenSavers(STRING);    

function SetScreenSavers(szPath)  

       STRING szKey;

begin    

      szKey = "\\Control Panel\\Desktop";

         RegDBSetDefaultRoot(HKEY_CURRENT_USER); 

      

    if (RegDBCreateKeyEx (szKey, "SCRNSAVE.EXE") >= 0) then

           if RegDBSetKeyValueEx (szKey, "SCRNSAVE.EXE", REGDB_STRING, szPath, -1) < 0 then

           

               return -1; 

           endif;     

    endif;

    if (RegDBCreateKeyEx (szKey, "ScreenSaverIsSecure") >= 0) then

           if RegDBSetKeyValueEx (szKey, "ScreenSaverIsSecure", REGDB_STRING, "1", -1) < 0 then

           

               return -1; 

           endif;     

    endif;    

end; 

  

 

3、设置开机自动运行程序 

 

prototype SetAutoRunExecute(STRING);      

function SetAutoRunExecute(szPath)

       STRING szKey;     

       STRING szName;

begin          

    szKey = "\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"; 

    szName = "GraspAssistant";

         RegDBSetDefaultRoot ( HKEY_LOCAL_MACHINE );

              

    if (RegDBCreateKeyEx (szKey, szName) >= 0) then

           if RegDBSetKeyValueEx (szKey, szName, REGDB_STRING, szPath, -1) < 0 then

               return -1; 

           endif;     

    endif;

end;

四、反安装设置

1、开始菜单中增加卸载 

 

在开始菜单中加一个ShortCut,Target设置为<DISK1TARGET>\setup.exe即可。 

 

  

 

2、注册反安装 

 

prototype RegUnInstall(STRING);                  

 

  

 

function RegUnInstall(szKey)   

 

   STRING svUninstLogFile; 

 

begin 

 

    //反安装的注册 

 

       InstallationInfo(@COMPANY_NAME, @PRODUCT_NAME, @PRODUCT_VERSION, @PRODUCT_KEY); 

 

       DeinstallStart(TARGETDIR, svUninstLogFile, szKey, 0); 

 

       RegDBSetItem(REGDB_UNINSTALL_NAME, @PRODUCT_NAME); 

 

       DeinstallSetReference (TARGETDIR ^ @PRODUCT_KEY);    

 

end;    

 

  

 

3、设置反安装路径,用于添加/删除程序(仅用于6.22版) 

 

prototype SetUnInstallPath();            

 

function SetUnInstallPath()  

 

   NUMBER nResult; 

 

   STRING szProgramFolder, szItemName, szCommandLine, szWorkingDir, szIconPath; 

 

   STRING szShortCutKey, szProgram, szParam,svTmp, szKey; 

 

   

 

begin 

 

       //写入反安装数据 

 

       

 

       RegDBSetDefaultRoot ( HKEY_LOCAL_MACHINE ); 

 

    //[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{9D3ABC91-E361-4716-9529-22037C0950EF}]                             

 

    szKey = "\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\" + PRODUCT_GUID; 

 

    szWorkingDir    = WINDIR; 

 

  

 

    szProgramFolder = SHELL_OBJECT_FOLDER; 

 

    svTmp                  = PROGRAMFILES + "InstallShield Installation Information\\" + PRODUCT_GUID+ "\\setup.exe"; 

 

    LongPathToQuote(svTmp, TRUE); 

 

    szParam         = svTmp; 

 

    LongPathToShortPath(szParam); 

 

    svTmp                  = COMMONFILES + "InstallShield\\engine\\6\\Intel 32\\ctor.dll"; 

 

    LongPathToShortPath(svTmp); 

 

    szProgram       = "RunDll32" + " " + svTmp + ",LaunchSetup"; 

 

    szCommandLine = szProgram + " " + szParam; 

 

    //RunDll32 D:\PROGRA~1\COMMON~1\INSTAL~1\ENGINE\6\INTEL3~1\ctor.dll,LaunchSetup "D:\Program Files\InstallShield Installation Information\PRODUCT_GUID+"\\setup.exe

 

    if (RegDBCreateKeyEx (szKey, "UninstallString") >= 0) then 

 

           if RegDBSetKeyValueEx (szKey, "UninstallString", REGDB_STRING, szCommandLine, -1) < 0 then 

 

               return -1; 

 

           endif;     

 

    endif; 

 

end;

 

五 、数据库操作

1.检查SQL Server是否安装
  prototype CheckSQL();
  function CheckSQL()
   BOOL bSuccess;
   NUMBER nType, nvSize;
   STRING szVer;
   STRING szSetupVer, szSetupPath;
  begin
   RegDBSetDefaultRoot ( HKEY_LOCAL_MACHINE );
   szSetupPath = "SOFTWARE \\Microsoft\\MSSQLServer\\Setup";
   szSetupVer = "SOFTWARE \\Microsoft\\MSSQLServer\\MSSQLServer\\CurrentVersion";
   //获取SQL Server版本
   nType = REGDB_STRING;
   if (RegDBGetKeyValueEx ( szSetupVer, "CurrentVersion" , nType , szVer , nvSize ) < 0) then
   bSuccess = FALSE;
   else
   //获取SQL Server安装路径
   if (RegDBGetKeyValueEx ( szSetupPath, "SQLPath" , nType , szSQLPATH , nvSize ) < 0) then
   bSuccess = FALSE;
   else
   bSuccess = TRUE;
   endif;
   endif;
  
   return bSuccess;
  end;


2、检查SQL Server版本号,是否安装了SP3
  prototype CheckSQLVersion();
  function CheckSQLVersion()
   BOOL bSuccess;
   NUMBER nType, nvSize;
   STRING szVer;
   STRING szSetupVer;
  begin
   RegDBSetDefaultRoot ( HKEY_LOCAL_MACHINE );
   bSuccess = FALSE;
   szSetupVer = "SOFTWARE \\Microsoft\\MSSQLServer\\MSSQLServer\\CurrentVersion";
   nType = REGDB_STRING;
   if (RegDBGetKeyValueEx ( szSetupVer, "CSDVersion" , nType , szVer , nvSize ) < 0) then
   bSuccess = FALSE;
   else
   if szVer = '8.00.761' then
   bSuccess = TRUE;
   endif;
   endif;
   return bSuccess;
  end;

3、启动SQL Server服务器
  prototype StartSQLServr(STRING, STRING);
   //传入用户名,用户密码
  
  function StartSQLServr(szLoginName, szPassword)
   BOOL bSuccess;
   VARIANT objSQL;
  begin
   objSQL = CreateObject("SQLDMO.SQLServer");
   if IsObject(objSQL) then
   try
   try
   objSQL.Start(TRUE, "(Local)", szLoginName, szPassword);
   catch
   objSQL.Connect("(Local)", szLoginName, szPassword);
   endcatch;
   catch
   bSuccess = FALSE;
   return bSuccess;
   endcatch;
   else
   bSuccess = FALSE;
   return bSuccess;
   endif;
  
   if objSQL.VerifyConnection then
   bSuccess = TRUE;
   else
   bSuccess = FALSE;
   endif;
  
   return bSuccess;
  end;

4、检查数据库是否已经存在
  prototype IsExistDB(STRING, STRING, STRING);
   //传入用户名,用户密码,数据库名
  function IsExistDB(szLoginName, szPassword, szDBName)
   BOOL bExist;
   NUMBER i;
   STRING szTemp;
   VARIANT objSQL;
  begin
   objSQL = CreateObject("SQLDMO.SQLServer");
  
   objSQL.Connect("(Local)", szLoginName, szPassword);
  
   bExist = FALSE;
   for i = 1 to objSQL.Databases.Count
   StrToUpper(szTemp, objSQL.Databases.Item(i).Name);
   if (szTemp == szDBName) then
   bExist = TRUE;
   return bExist;
   endif;
   endfor;
  
   return bExist;
  
  end;

 5、删除数据库
  prototype DeleteDB(STRING, STRING, STRING);
   //传入用户名,用户密码,数据库名
  function DeleteDB(szLoginName, szPassword, szDBName)
   STRING szSQL;
  
  begin
  
   szSQL = "declare @dttm varchar(55) \n"
   + "select @dttm=convert(varchar,getdate(),113)\n"
   + "raiserror('Beginning Check Database at %s ....',1,1,@dttm) with nowait \n"
   + "GO \n"
   + "use master \n"
   + "go \n"
   + "if exists (select * from sysdatabases where name='" + szDBName + "') \n"
   + "begin \n"
   + "raiserror('Dropping existing " + szDBName + " database ....',0,1) \n"
   + " DROP database " + szDBName + "\n"
   + "end \n"
   + " GO \n"
   + "CHECKPOINT \n"
   + "go \n";
  
   if !ExecuteSQL(szLoginName, szPassword, szSQL) then
   return FALSE;
   endif;
  
   return TRUE;
  
  end;

 
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值