文章的开始
从今天开始,我将来学习和研究 InstallShieldX 的功能,并用它来完成我们公司的教育片的DEMO安装,之前也有用过 InstallShield Profressional 5.0 的安装!但是随着Windows的不断升级,过去的安装逐渐得不能适应现在的要求。
整理2005.1.6
教育片的安装已经在2个星期的准备中完成,现在将安装过程中,出现的一些问题整理出来!
1.技术站点
http://community.installshield.com
InstallShield 的技术官方网站
网站是InstallShield 官方网站直接 Link 过去的一个 InstallShield 产品技术的BBS. 在安装过程中出现的大部分
问题都可以在里面直接找到答案!
2. ISX中,建立 InstallShield Script Project。需要 BDE 5.1 的Mager Modal.
但是之前的 IS10.5 的安装并不存在 MSDE2000 Modal. 最后是通过 IS 的网站上
down了一个installshield1050legacyinstallscriptobjects(1) 安装文件,才得以最
后的解决
3. 安装MSDE Modal 过程
1). 首先将 MSDE 作为安装的一部分,并且在添加 MSDE 为 Feature 一
部分的,需要输入安装的特有的一些信息,比如 Instance name ,password…
2). 因为 MSDE2000 的安装需要Check 目标机器的一些 Requirement.
ISX 提供的的MSDE2000帮助文件提供的利用 Object 的方法,即可。
///
//
// Function: CheckMSDEObjectStatus
//
// Purpose: This function checks all minimum requirements for the
// MSDE2000 being installed. Check
// 1.if the instance had installed.then don't install it fater
// 2.if the IE Old not required . then show message . abort
///
function CheckMSDEObjectStatus()
object oObject, oStatus;
string szStatus;
number nStausId;
begin
try
set oObject = GetObject("MSDE2000");
catch
MessageBox (Err.Description, SEVERE);
abort;
endcatch;
if (!IsObject(oObject)) then
MessageBoxEx( "Failed to get MSDE2000 object reference.", "", INFORMATION );
abort;
endif;
try
set oStatus = oObject.Status;
nStausId = oStatus.Number;
if (!(oStatus.Number = OBJ_STATUS_SUCCESS ||
oStatus.Number = MSI_ERROR_SUCCESS_REBOOT_REQUIRED)) then
Sprintf( szStatus, "MSDE 2000 Object/n/nNumber:/t/t%d/n" +
"Description:/t%s/nFile:/t/t%s/nLine:/t/t%d/nScript Error:/t%d",
oStatus.Number, oStatus.Description, oStatus.szScriptFile,
oStatus.nScriptLine, oStatus.nScriptError );
MessageBoxEx( szStatus, "", SEVERE );
abort;
endif;
catch
Sprintf( szStatus, "MSDE2000 Unexpected Exception/n/nNumber: 0X%X/nDescription:" +
"%s/nSource: %s/nHelp File: %s/nHelp Context: %d", Err.Number,
Err.Description, Err.Source, Err.HelpFile, Err.HelpContext);
MessageBoxEx( szStatus, "", SEVERE );
abort;
endcatch;
end;
3). 安装过程判断之前有安装过 SQL SERVER.则包括MSDE的 Items 了。
判断下面的 是否存在,来判断 SQL SERVER 是否安装了
#define REG_ISSETUP_MSSQL "//SOFTWARE//Microsoft//MSSQLServer//MSSQLServer//CurrentVersion"
4).安装 MSDE2000 结束后,需要马上自动启动起来 SQL SERVER 来做后续的动作。
自动 SQL SERVER 的方法很多,手动可以通过 MMC. Server Manger.... 来启动外。
但是,我们的安装需要自动来启动,方法如下
a. NET START MSSQLSERVER
b. ServiceGetServiceState("SQLSERVER", ServiceState);
if (ServiceState = SERVICE_STOPPED) then
ServiceStartService("SQLSERVER", "");
endif;
c. 通过 IS Script 来启动
///
//
// Function: startSQLServer
//
// 啟動指定SQL SERVER. 用SQL-DMO來啟動
// 其他的啟動 SQL SERVER 還有其他的一些方法.不過其他的都沒有太好的測試
// 1.NET.EXE START MSSQLSERVER
// 2.ServiceStartService
// 3.scm.exe Command line
//
function BOOL startSQLServer (strServerName,strUserName,strPassWord)
object dmoServer;
BOOL bStartMode;
begin
try
set dmoServer = CreateObject ("SQLDMO.SQLServer");
catch
MessageBox (Err.Description, SEVERE);
return FALSE;
endcatch;
if (! IsObject (dmoServer)) then
MessageBox ("Microsoft SQL-DMO is not installed on your computer!", SEVERE);
// free object
set dmoServer = NOTHING;
return FALSE;
endif;
try
bStartMode = TRUE;
dmoServer.Name = strServerName;
if(dmoServer.Status () != 1) then
dmoServer.Start(bStartMode, strServerName, strUserName, strPassWord);
endif;
catch
MessageBox (Err.Description, SEVERE);
// free object
set dmoServer = NOTHING;
return FALSE;
endcatch;
//SQL-DMO狀態是否啟動成功了 SQL SERVER
if (dmoServer.Status () != 1) then
return FALSE;
else
return TRUE;
endif;
end;
PS: 我的安装中,选择是 C).Install Script 来启动。因为,其他的2个情况,都不适合 Win98下的
C).Script 的方法,还可以进行数据库的恢复,创建,已经一些 SQL 语句的执行 !
5). SQL SERVER 需要用户下次启动机器的时候,自动启动 SQL SERVER
#define REG_START_SQLSERVER "scm.exe -Action 1 -Silent 1 -Service MSSQLServer"
将下面的 Regeste key 写入到 Reg 的 Run ,