Installshield打包ArcEngine&SQL Server

/ 0评 / 0

最近为了打包程序被Installshield折腾死了,记个备忘。

AE打包:

function OnMoved()
string szCommand,szCmdLine,szPath,svResult,LicPath,tempdir;
STRING svLine,svReturnLine,InsertTxt; //////操作文件的变量
NUMBER nvFileHandle; //////////文件句柄
NUMBER nvLineNumber ,nvResult; //////////操作文件的变量
begin
szPath=SUPPORTDIR^"arcengine";
szCommand = WINSYSDIR^"msiexec.exe";
LongPathToShortPath(szCommand);
//安装dotnetfx2.exe
//GetEnvVar("TEMP", tempdir);//得到临时目录
//FindAllFiles(SUPPORTDIR^"dotnetfx", "install.exe" , tempdir, CONTINUE );//在临时目录下搜索dotnetfx.exe文件
SdShowMsg("正在安装.NET 2.0,请稍后...", TRUE);
if(LaunchAppAndWait(SUPPORTDIR^"dotnetfx"^"install.exe", "/q /norestart",WAIT)<0) then   
SdShowMsg("安装.NET 2.0失败", TRUE);
abort;                       
SdShowMsg("安装.NET 2.0失败", FALSE);
endif;                                               
SdShowMsg("正在安装.NET 2.0,请稍后...", FALSE);  

////////////////////////安装AE 运行时
if (FindFile (szPath, "setup.msi", svResult) = 0) then
szCmdLine = SUPPORTDIR^"arcengine"^"setup.msi\"/qn";
LongPathToShortPath(szCmdLine);            
SdShowMsg("正在安装ArcGIS Engine Runtime,依据机器性能需要几分钟到十几分钟,请稍后...", TRUE);
Delay(1);
if (LaunchAppAndWait(szCommand ,"/i \""+szCmdLine,WAIT) < 0) then   
MessageBox("安装ArcGIS Engine Runtime失败!", WARNING);
abort; 
SdShowMsg("正在安装ArcGIS Engine Runtime,依据机器性能需要几分钟到十几分钟,请稍后...", FALSE);
endif;
endif;                 

/////////////////////////AE 授权
LicPath=" -Lif \"" +SUPPORTDIR^"arcengine\\ecp\\license9-30.ecp\" -s";   
SdShowMsg("正在对ArcGIS Engine Runtime授权,请稍后...", TRUE);
if (FindFile (SUPPORTDIR^"arcengine"^"ecp", "license9-30.ecp", svResult) = 0) then

if(SYSINFO.bIsWow64) then
szCmdLine="C:\\Program Files(x86)\\ArcGIS\\Bin\\SoftwareAuthorization.exe";
else
szCmdLine="C:\\Program Files\\ArcGIS\\Bin\\SoftwareAuthorization.exe ";
endif;
if (LaunchAppAndWait(szCmdLine ,LicPath,WAIT) < 0) then  
	MessageBox("授权错误!",WARNING);
	//abort;
endif; 

endif;

if (ExistsDir(TARGETDIR^"temp")=0 ) then
if (DeleteProgramFolder (TARGETDIR^"temp") < 0) then
endif ;
endif ;         
SdShowMsg("正在对ArcGIS Engine Runtime授权,请稍后...", FALSE);
end;

SQL SERVER打包:

function OnFirstUIAfter()
    STRING szTitle, szMsg1, szMsg2, szOpt1, szOpt2;
    NUMBER bvOpt1, bvOpt2;
	NUMBER bShowUpdateServiceDlg;
    STRING szWaitText;
    STRING szServiceName;
    NUMBER svServiceState;
    STRING szMsde2005, szCmdLine,szStartServiceArgs, szSSMSEE, szCommand, appPath;
begin
    // 如果安装程序以“维护”模式启动
    if (MAINTENANCE) then
        goto EndProcess;
    endif;

    // 检查系统是否安装了 MSDE 2005
    szWaitText = "正在检查系统是否安装了 MSSQLSERVER .";
    SdShowMsg( szWaitText, TRUE);    

    szServiceName = "MSSQL$SQLEXPRESS";
    if(ServiceGetServiceState(szServiceName, svServiceState) < ISERR_SUCCESS) then
        // 没有安装 MSSQLSERVER,转安装处理
        goto InstallMSDE;    
    endif;
    goto StartMSDE; 

InstallMSDE:  // 安装数据库服务  
    szWaitText = "正在安装 MSSQLSERVER 2005。这个过程需要几分钟,请稍等";
    SdShowMsg(szWaitText, TRUE); 

    szMsde2005 = SUPPORTDIR^"SQLEXPR.exe";           
    //LongPathToShortPath(szMsde2005);
    //szSSMSEE = SUPPORTDIR ^ "SQLServer2005_SSMSEE.exe /qn";      
    szCommand = WINSYSDIR^"msiexec.exe";     
    //szCmdLine = "/x:" + SUPPORTDIR^"sqlexpr";  

    ////解压 SQLEXPR.exe
	//if(LaunchAppAndWait(SUPPORTDIR^"SQLEXPR.exe", szCmdLine, LAAW_OPTION_WAIT|LAAW_OPTION_MAXIMIZED) < 0 ) then
		// 将 MSDE 2005 安装到系统 Program File 目录下
		szCmdLine = "TARGETDIR=\"" + PROGRAMFILES + "\" /qb /norebootchk SECURITYMODE=SQL SAPWD=123 ADDLOCAL=ALL DISABLENETWORKPROTOCOLS=0 SQLAUTOSTART=1";
		if(LaunchAppAndWait(szMsde2005, szCmdLine, LAAW_OPTION_WAIT|LAAW_OPTION_MAXIMIZED) < 0 ) then
		MessageBox ("安装 MSSQLSERVER 2005 失败,请联系系统管理员!", SEVERE);
	    goto EndProcess;
	    endif;

    //endif;  

    //if (LaunchAppAndWait(szCommand ,"/i \""+szSSMSEE,WAIT) < 0) then   
	//	MessageBox("安装MSDE2005 Studio失败!", WARNING);
	//	abort; 
    //endif; 

StartMSDE: // 启动 MSSQLSERVER 服务          

    //设置端口号                                 
    REGDB_OPTIONS = REGDB_OPTIONS & ~REGDB_OPTION_WOW64_64KEY;
    //disable 64  REGDB_OPTIONS | REGDB_OPTION_WOW64_64KEY
    //enable 64 REGDB_OPTIONS & ~REGDB_OPTION_WOW64_64KEY
 	RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
	RegDBSetKeyValueEx("SOFTWARE\\Microsoft\\Microsoft SQL Server\\MSSQL.1\\MSSQLServer\\SuperSocketNetLib\\Tcp\\IPAll", "TcpPort", REGDB_STRING, "1433", -1);
	    //MessageBox ("修改 MSSQLSERVER 2005 端口失败,请联系系统管理员!", SEVERE);     
	//endif;    
	Delay(2); 
	ServiceStopService (szServiceName);                               
	Delay(2); 
    szWaitText = "正在启动 MSSQLSERVER .";
    SdShowMsg( szWaitText, TRUE);    

    // 安装了 MSDE 2005, 试着启动服务
    szStartServiceArgs = "";    
    //if(svServiceState != SERVICE_RUNNING) then   
        if (ServiceStartService (szServiceName, szStartServiceArgs) < ISERR_SUCCESS ) then
            MessageBox ("启动服务" + szServiceName + "出错。", SEVERE);
            goto EndProcess;
        endif;
    //endif;

    // 加载用户数据库
    szWaitText = "正在创建所需数据库.";
    SdShowMsg(szWaitText, TRUE);
    Delay(2); 

    // 先试着分离先前已经加载的数据库
    szCmdLine = "/E /Q \"exec sp_detach_db 'xxxxx'\""; 
    //LAAW_OPTION_NOWAIT | LAAW_OPTION_HIDDEN
    if(LaunchAppAndWait("osql.exe ", szCmdLine, WAIT) < 0) then 
       // MessageBox ("分离原来的数据库失败!请确认系统中已安装 MSSQLSERVER 并且服务已启动。如问题仍无法解决,请与联系统管理员联系!", SEVERE); 
    endif; 
    Delay(2);              
    // 将数据文件复制到程序安装目录
    //CreateDir( TARGETDIR ^ "Database");
    //CopyFile( SRCDIR ^ "Database" ^ "xxxxx.mdf", TARGETDIR ^ "Database" ^ "xxxxx.mdf");
    //CopyFile( SRCDIR ^ "Database" ^ "xxxxx_log.ldf", TARGETDIR ^ "Database" ^ "xxxxx_log.ldf");    

    // 附加数据库       
    appPath = PROGRAMFILES^"xxxxx"^"xxxxx"^"database";  
    LongPathToShortPath(appPath);                                                                 
    WriteLog("apPath:"+appPath);
    //szCmdLine = "/E /Q \"exec sp_attach_db @dbname=N'xxxxx','"+  PROGRAMFILES^"信息系统"^"database"^"xxxxx.mdf','" +  PROGRAMFILES"^"信息系统"^"database"^"xxxxx_log.ldf'\"";  
    szCmdLine = "/E /Q \"exec sp_attach_db 'xxxxx', '" + appPath + "\\xxxxx.mdf', '" + appPath + "\\xxxxx_log.ldf'\" ";   
    WriteLog("szCmdLine:"+szCmdLine);
    //LAAW_OPTION_NOWAIT | LAAW_OPTION_HIDDEN
    if (LaunchAppAndWait("osql.exe", szCmdLine, WAIT) < 0) then 
          MessageBox ("数据库创建失败!请确认系统中已安装 MSSQLSERVER 并且服务已启动。如问题仍无法解决,请与联系统管理员联系!", SEVERE); 
    endif;

    SdShowMsg(szWaitText, FALSE);     

EndProcess:                      
	//owh add
    SdShowMsg(szWaitText, FALSE);   
    // 以下代码是系统自动插入的
    ShowObjWizardPages(NEXT);

    szTitle = "";
    szMsg1 = ""; 
    szMsg2 = "";
    szOpt1 = "";
    szOpt2 = "";
    bvOpt1   = FALSE;
    bvOpt2   = FALSE;    

    // Set this to true if you have the update service enabled, and if you want to check for updates.
    // Note: the ISUS Starter Edition does not support checking for updates programatically.  So, 
    // only set this to true if you have at least the ISUS Professional Edition.
    bShowUpdateServiceDlg = FALSE;

    //{{IS_SCRIPT_TAG(Dlg_SdDinishEx)    

    if ( BATCH_INSTALL ) then
        SdFinishReboot ( szTitle , szMsg1 , SYS_BOOTMACHINE , szMsg2 , 0 );
    else

        // If the update service is enabled, show finish dialog that includes
        // update check option.
        if( bShowUpdateServiceDlg && ( ENABLED_ISERVICES & SERVICE_ISUPDATE ) ) then

            if( SdFinishUpdateEx( szTitle, szMsg1, szMsg2, szOpt1, szOpt2, TRUE ) ) then

                // Don't check for updates in silent mode.
                if( MODE != SILENTMODE ) then
                    UpdateServiceCheckForUpdates( "", FALSE );
                endif;

            endif;

        else
            SdFinish ( szTitle , szMsg1 , szMsg2 , szOpt1 , szOpt2 , bvOpt1 , bvOpt2 );
        endif;

    endif;
    //}}IS_SCRIPT_TAG(Dlg_SdDinishEx)      
    //owh add
    abort;
end;

发表评论

电子邮件地址不会被公开。 必填项已用*标注