IS
////////////////////////////////////////////////////////////////////////////////
//
// IIIIIII SSSSSS
// II SS InstallShield (R)
// II SSSSSS (c) 1996-1999, InstallShield Software Corporation
// II SS (c) 1990-1996, InstallShield Corporation
// IIIIIII SSSSSS All Rights Reserved.
//
//
// This code is generated as a starting setup template. You should
// modify it to provide all necessary steps for your setup.
//
//
// File Name: Setup.rul
//
// Description: InstallShield script
//
// Comments: This template script performs a basic setup. With minor
// modifications, this template can be adapted to create
// new, customized setups.
//
////////////////////////////////////////////////////////////////////////////////
// Include header files
// STRING nvPathValue,szMsg;
// NUMBER nvType, nrSize;
#define TITLE "清软英泰PDM安装"
#include "ifx.h" //DO NOT REMOVE
prototype INT lfsofm43.DecryptStr( STRING, BYREF STRING ); // 外部 dll
////////////////////// string defines ////////////////////////////
//////////////////// installation declarations ///////////////////
// ----- DLL function prototypes -----
// your DLL function prototypes
// ---- script function prototypes -----
// your script function prototypes
// your global variables
prototype Config(); //定制允许安装的模块
prototype SetupDir(); //设置三维软件的安装路径
STRING ugDes, SolidworksDes, solidedgeDes,proeDes,autocadDes;
//////////////////////////////////////////////////////////////////////////////
//
// FUNCTION: OnFirstUIBefore
//
// EVENT: FirstUIBefore event is sent when installation is run for the first
// time on given machine. In the handler installation usually displays
// UI allowing end user to specify installation parameters. After this
// function returns, ComponentTransferData is called to perform file
// transfer.
//
///////////////////////////////////////////////////////////////////////////////
function OnFirstUIBefore()
NUMBER nResult,nSetupType;
STRING szTitle, szMsg;
STRING szLicenseFile, szQuestion;
STRING svName, svCompany, svSerial;
STRING szFile;
STRING szTargetPath;
STRING szDir;
STRING szfolder;
STRING szComponents, szTargetdir;
NUMBER nLevel;
LIST listStartCopy;
LIST list;
NUMBER nvSize;
NUMBER nDx,nDy;
STRING svPicName;
STRING szTemp; //临时字符串
BOOL nvCheckClient, nvCheckCatch, nvCheckCode,nvCheckGenerator,nvCheckConfig; //标志客户端、批量提取、编码是否被选择
BOOL nvCheckProe, nvCheckSolidworks, nvCheckSolidedge,nvCheckUg,nvCheckOffice,nvCheckAutocad; //标志三维软件是否被选择
STRING szKey,szName,envValue; //注册表项
NUMBER nrType, nPos;
STRING SERVER_NAME;
STRING svResult;
//STRING component(7); //分别指向7个组件
begin
//To Do: if you want to enable background, window title, and caption bar title
//SetTitle( @TITLE_MAIN, 24, WHITE );
SetFont (FONT_TITLE,STYLE_ITALIC ,"Times New Roman");
SetTitle( @TITLE_MAIN, 24, WHITE);//WHITE ); @TITLE_MAIN
SetTitle( @TITLE_CAPTIONBAR, 0, BACKGROUNDCAPTION );
Enable( FULLWINDOWMODE );
Enable( BACKGROUND );
//SetColor(BACKGROUND,RGB (0, 128, 255)|BK_SMOOTH);
GetExtents(nDx,nDy);
SizeWindow(METAFILE,nDx/20,nDy/20);
PlaceWindow(BILLBOARD,10,10,UPPER_LEFT);
//SetColor ( BACKGROUND , BK_BLUE );
//GetExtents(nvDx,nvDy);
SetDisplayEffect (EFF_FADE);
svPicName = SUPPORTDIR ^ "Setup.bmp";
PlaceBitmap (svPicName, 11,0,0,FULLSCREENSIZE);//FULLSCREENSIZE);BITMAPICON
Delay(1);
nSetupType = TYPICAL;
//TARGETDIR = PROGRAMFILES ^@AppPath^ "Client";
TARGETDIR = "C:\\thitsoft";
szDir = TARGETDIR;
SHELL_OBJECT_FOLDER = @FOLDER_NAME;
svName = "英泰PDM";
svCompany = "清软英泰软件";
svSerial = "";
//应姚作勋的要求对以前安装的PDM版本首先进行卸载,先给出提示吧
//如果是本版本安装的,则会直接调用OnMaintUIBefore,否则转到这里
RegDBSetDefaultRoot(HKEY_CURRENT_USER);
//如果在注册表中找到Software\\PDMS\\3.8 或者Software\\PDMS\\AllCatch键,则说明有以前版本的没有卸载
/* if ( (RegDBKeyExist ("Software\\PDMS\\3.8") = 1) || (RegDBKeyExist ("Software\\PDMS\\AllCatch") = 1) ) then
if ( AskYesNo( "检测到以前版本的PDM软件,请先卸载再进行安装", YES) = YES) then
abort;
endif;
endif;
*/
//首先判断,只有系统管理员级用户才可以安装
if (Is (USER_ADMINISTRATOR, szTemp) != TRUE) then
MessageBox("只有Windows系统管理员级用户才可以进行安装,请退出安装程序,以系统管理员用户登陆后安装",SEVERE);
abort;
endif;
Dlg_Start:
// beginning of dialogs label
Dlg_SdWelcome:
szTitle = "欢迎使用清软英泰产品数据管理系统";//欢迎使用英泰软件
szMsg = "软件安装向导将在您的计算机中安装『清软英泰产品数据管理系统』,若要继续请按下一步。建议您在安装系统之前关闭所有的应用程序。";//欢迎,欢迎热烈欢迎
//svPicName="setup.bmp";
nResult = SdWelcome( szTitle, szMsg );
//SdBitmap(szTitle,szMsg,svPicName);
if (nResult = BACK) goto Dlg_Start;
Dlg_SdLicense:
szLicenseFile = SUPPORTDIR ^ "license.txt";
szTitle = "";
szMsg = "";
szQuestion = "";
nResult = SdLicense( szTitle, szMsg, szQuestion, szLicenseFile );
if (nResult = BACK) goto Dlg_SdWelcome;
// Dlg_SdShowInfoList:
// szFile = SUPPORTDIR ^ "infolist.txt";
// list = ListCreate( STRINGLIST );
// ListReadFromFile( list, szFile );
// szTitle = "";
// szMsg = "";
// nResult = SdShowInfoList( szTitle, szMsg, list );
// ListDestroy( list );
// if (nResult = BACK) goto Dlg_SdLicense;
// Dlg_SdRegisterUserEx:
// szMsg = "";
// szTitle = "";
// nResult = SdRegisterUserEx( szTitle, szMsg, svName, svCompany, svSerial );
// if (nResult = BACK) goto Dlg_SdShowInfoList;
Dlg_SdAskDestPath:
szTitle = "";
szMsg = "";
nResult = SdAskDestPath( szTitle, szMsg, szDir, 0 );
TARGETDIR = szDir;
if (nResult = BACK) goto Dlg_SdLicense;//Dlg_SdRegisterUserEx;
//读配置文件setup.ini,使某些组件不可见
Config();
Dlg_SdComponentTree:
// if ((nResult = BACK) && (nSetupType != CUSTOM)) goto Dlg_SetupType;
szTitle = "安装组件选择";
szMsg = "请选择要安装的组件";
szTargetdir = TARGETDIR;
szComponents = "";
nLevel = 2;
//将组件是否选择的标志置回去
nvCheckClient = FALSE;
nvCheckCatch = FALSE;
nvCheckCode = FALSE;
nvCheckProe = FALSE;
nvCheckUg = FALSE;
nvCheckSolidworks = FALSE;
nvCheckSolidedge = FALSE;
nvCheckOffice = FALSE;
nvCheckGenerator = FALSE;
nvCheckAutocad = FALSE;
nvCheckConfig = FALSE;
nResult = SdFeatureDialog2(szTitle, szMsg, szTargetdir, szComponents);
if (nResult = BACK) goto Dlg_SdAskDestPath;
//记录下来哪些组件要进行安装
if (FeatureIsItemSelected(MEDIA, "客户端") = 1 ) then
nvCheckClient = TRUE;
endif;
if (FeatureIsItemSelected(MEDIA, "批量提取工具") = 1 ) then
nvCheckCatch = TRUE;
endif;
if ( FeatureIsItemSelected(MEDIA, "消息工具") = 1) then
nvCheckCode = TRUE;
endif;
if ( FeatureIsItemSelected(MEDIA, "Proe集成") = 1) then
nvCheckProe = TRUE;
endif;
if ( FeatureIsItemSelected(MEDIA, "Ug集成") = 1) then
nvCheckUg = TRUE;
endif;
if ( FeatureIsItemSelected(MEDIA, "SolidWorks集成") = 1) then
nvCheckSolidworks = TRUE;
endif;
if ( FeatureIsItemSelected(MEDIA, "SolidEdge集成") = 1) then
nvCheckSolidedge = TRUE;
endif;
if ( FeatureIsItemSelected(MEDIA, "AutoCAD集成") = 1) then
nvCheckAutocad = TRUE;
endif;
if ( FeatureIsItemSelected(MEDIA, "Office集成") = 1) then
nvCheckOffice = TRUE;
endif;
//wyy 2004-1-17增加编码生成器
if ( FeatureIsItemSelected(MEDIA, "编码管理工具") = 1) then
nvCheckGenerator = TRUE;
endif;
//增加建模工具
if ( FeatureIsItemSelected(MEDIA, "建模工具") =1) then
nvCheckConfig =TRUE;
endif;
//如果没有选择任何组件,则给出提示,重新选择
if (!nvCheckClient && !nvCheckCatch && !nvCheckCode && !nvCheckProe && !nvCheckUg && !nvCheckSolidworks && !nvCheckSolidedge && !nvCheckAutocad && !nvCheckOffice && !nvCheckGenerator && !nvCheckConfig) then
MessageBox("请至少选择一个组件进行安装", WARNING);
goto Dlg_SdComponentTree;
endif;
//把以下设置路径的操作,放在一个函数里进行
if (SetupDir() = FALSE) then
goto Dlg_SdComponentTree;
endif;
Dlg_SdStartCopy:
szTitle = "";
szMsg = "";
listStartCopy = ListCreate( STRINGLIST );
ListAddString(listStartCopy, "安装程序将安装以下组件:\r\n" , AFTER );
if ( nvCheckClient) then
ListAddString(listStartCopy, " 客户端\r\n", AFTER );
endif;
if ( nvCheckCatch ) then
ListAddString(listStartCopy, " 批量提取工具\r\n", AFTER );
endif;
if ( nvCheckCode ) then
ListAddString(listStartCopy, " 消息工具\r\n", AFTER );
endif;
if ( nvCheckProe ) then
ListAddString(listStartCopy, " Proe集成\r\n", AFTER );
endif;
if ( nvCheckUg ) then
ListAddString(listStartCopy, " Ug集成\r\n", AFTER );
endif;
if ( nvCheckSolidworks ) then
ListAddString(listStartCopy, " SolidWorks集成\r\n", AFTER );
endif;
if ( nvCheckSolidedge ) then
ListAddString(listStartCopy, " SolidEdge集成\r\n", AFTER );
endif;
if ( nvCheckAutocad ) then
ListAddString(listStartCopy, " AutoCAD集成\r\n", AFTER );
endif;
if ( nvCheckOffice ) then
ListAddString(listStartCopy, " Office集成\r\n", AFTER );
endif;
if ( nvCheckGenerator ) then
ListAddString(listStartCopy, " 编码管理工具\r\n", AFTER );
endif;
if ( nvCheckConfig ) then
ListAddString(listStartCopy, " 建模工具\r\n", AFTER);
endif;
ListAddString(listStartCopy, "\r\n安装路径:\r\n " + TARGETDIR + "\ 目录下", AFTER );
nResult = SdStartCopy( szTitle, szMsg, listStartCopy );
ListDestroy(listStartCopy);
if (nResult = BACK) goto Dlg_SdComponentTree;
// setup default status 11
SetStatusWindow(0, "");
Enable(STATUSEX);
StatusUpdate(ON, 100);
return 0;
end;
//////////////////////////////////////////////////////////////////////////////
//
// FUNCTION: OnFirstUIAfter
//
// EVENT: FirstUIAfter event is sent after file transfer, when installation
// is run for the first time on given machine. In this event handler
// installation usually displays UI that will inform end user that
// installation has been completed successfully.
//
///////////////////////////////////////////////////////////////////////////////
function OnFirstUIAfter()
STRING szTitle, szMsg1, szMsg2, szOption1, szOption2;
STRING svResult;
NUMBER bOpt1, bOpt2;
NUMBER nType, nvType,nrSize,nVersion;
STRING nvPathValue,szTemp;
begin
Disable(STATUSEX);
//viewgwd控件现在已经打在安装包里了,不需要另外安装了
/* if (SYSINFO.WIN9X.bWin9X) then
//如果装了client,则运行以下程序
if ( FindFile (TARGETDIR ^ "\\client\\application\\" , "ViewGwd9x.EXE", svResult) = 0 ) then
LaunchAppAndWait(TARGETDIR ^ "\\client\\application\\ViewGwd9x.EXE", "",WAIT);
//否则如果装了catch,运行catch目录下的这个程序
elseif ( FindFile (TARGETDIR ^ "\\allCatch\\" , "ViewGwd9x.EXE", svResult) = 0 ) then
LaunchAppAndWait(TARGETDIR ^ "\\allCatch\\ViewGwd9x.EXE", "",WAIT);
endif;
else
//同上
if ( FindFile (TARGETDIR ^ "\\client\\application\\" , "ViewGwdNT.EXE", svResult) = 0 ) then
LaunchAppAndWait(TARGETDIR ^ "\\client\\application\\ViewGwdNT.EXE", "",WAIT);
elseif ( FindFile (TARGETDIR ^ "\\allCatch\\" , "ViewGwdNT.EXE", svResult) = 0 ) then
LaunchAppAndWait(TARGETDIR ^ "\\allCatch\\ViewGwdNT.EXE", "",WAIT);
endif;
endif;
*/
//同上
RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE);
if ( RegDBKeyExist ("Software\\Microsoft\\.NETFramework\\v3.0") < 0) then
if ( RegDBKeyExist ("Software\\Microsoft\\Active Setup\\Installed Components\\{7131646D-CD3C-40F4-97B9-CD9E4E6262EF}") < 0) then
// RegDBGetKeyValueEx ("Software\\Microsoft\\Active Setup\\{7131646D-CD3C-40F4-97B9-CD9E4E6262EF}", "Version", nvType, nvPathValue, nrSize);
// StrSub (szTemp, nvPathValue, 4, 1 );
// StrToNum(nVersion,szTemp);
// if( nVersion < 5 ) && (nvPathValue != "v2.0.50727")then
// if ( AskYesNo("机器检测到.NET FRAMEWORK现有版本低于v2.0.50727,你是否要继续安装现有.NET FRAMEWORK。", YES) = YES) then
if ( FindFile (TARGETDIR ^ "\\client\\" , "Net Framework.exe", svResult) = 0) then
LaunchAppAndWait(TARGETDIR ^ "\\client\\Net Framework.exe", "",WAIT);
endif;
//endif;
// endif;
// else
// if ( FindFile (TARGETDIR ^ "\\client\\" , "Net Framework.exe", svResult) = 0) then
// LaunchAppAndWait(TARGETDIR ^ "\\client\\Net Framework.exe", "",WAIT);
// endif;
endif;
endif;
if ( FindFile (TARGETDIR ^ "\\client\\" , "sn.exe", svResult) = 0 ) then
LaunchAppAndWait(TARGETDIR ^ "\\client\\sn.exe", "-Vr DevExpress.Data.v7.2.dll",WAIT);
endif;
if ( FindFile (TARGETDIR ^ "\\client\\" , "sn.exe", svResult) = 0 ) then
LaunchAppAndWait(TARGETDIR ^ "\\client\\sn.exe", "-Vr DevExpress.Utils.v7.2.dll",WAIT);
endif;
if ( FindFile (WINDIR ^ "\\Microsoft.NET\\Framework\\v2.0.50727\\","RegAsm.exe",svResult) = 0) then
LaunchAppAndWait(WINDIR ^ "\\Microsoft.NET\\Framework\\v2.0.50727\\RegAsm.exe", TARGETDIR ^ "\\client\\Thit.TiPDM.APP.TiPDMIntegration.dll /tlb:Thit.TiPDM.APP.TiPDMIntegration.tlb /codebase",WAIT);
// LaunchAppAndWait(WINDIR ^ "\\Microsoft.NET\\Framework\\v2.0.50727\\RegAsm.exe", TARGETDIR ^ "\\client\\Thit.TiPDM.APP.TiPDMIntegration.dll" ^ " /tlb Thit.TiPDM.APP.TiPDMIntegration.tlb /codebase",WAIT);
endif;
// if ( FindFile (TARGETDIR ^ "\\client\\application\\" , "Mdac_typ.exe", svResult) = 0 ) then
//LaunchAppAndWait(TARGETDIR ^ "\\client\\application\\Mdac_typ.exe", "",WAIT);
//elseif ( FindFile (TARGETDIR ^ "\\allCatch\\" , "Mdac_typ.exe", svResult) = 0 ) then
//LaunchAppAndWait(TARGETDIR ^ "\\allCatch\\Mdac_typ.exe", "",WAIT);
//endif;
//预留一个接口可以自动调用用户的安装程序,只需将安装程序放在安装盘所在run目录下,安装文件名为setup.exe
if ( FindFile (SRCDIR ^ "\\support\\otherSetup\\" , "setup.exe", svResult) = 0 ) then
LaunchAppAndWait(SRCDIR ^ "\\support\\otherSetup\\setup.exe", "",WAIT);
endif;
RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE);
RegDBSetKeyValueEx("SOFTWARE\\北京清软英泰信息技术有限公司\\TiPDM\\TiPDMCLT","InstallPath",REGDB_STRING,TARGETDIR,-1);
RegDBSetKeyValueEx("SOFTWARE\\北京清软英泰信息技术有限公司\\TiPDM\\Common","ConfigPath",REGDB_STRING,TARGETDIR ^"\\liveupdate\\config",-1);
RegDBSetKeyValueEx("SOFTWARE\\北京清软英泰信息技术有限公司\\TiPDM\\Common","WorkingPath",REGDB_STRING,TARGETDIR^"\\client",-1);
RegDBSetKeyValueEx("SOFTWARE\\北京清软英泰信息技术有限公司\\TiPDM\\Windows","InstallPath",REGDB_STRING,WINDIR,-1);
RegDBSetKeyValueEx("SOFTWARE\\北京清软英泰信息技术有限公司\\TiPDM\\TiLiveUpdate","LiveUpdatePath",REGDB_STRING,TARGETDIR^"\\liveupdate",-1);
RegDBSetKeyValueEx("SOFTWARE\\北京清软英泰信息技术有限公司\\TiPDM\\TiLiveUpdate","ClientPath",REGDB_STRING,TARGETDIR^"\\client",-1);
/*
//其它控件注册
if ( FindFile (TARGETDIR ^ "\\otherRegister\\" , "registerList.txt", svResult) = 0 ) then
//打开参数文件,读取需要注册的控件
OpenFileMode (FILE_MODE_NORMAL);
if (OpenFile (nvFileHandle, TARGETDIR ^ "\\otherRegister\\", "registerList.txt") < 0) then
MessageBox ("打开注册文件失败。", SEVERE);
// abort;
endif;
while GetLine (nvFileHandle, szLine) = 0
MessageBox (szLine, SEVERE);
regsvr32
endif;
endwhile;
endif;
*/
bOpt1 = FALSE;
bOpt2 = FALSE;
szMsg1 = SdLoadString(IFX_SDFINISH_MSG1);
szMsg2 = "";
szOption1 = "";
szOption2 = "";
szTitle = "清软英泰PDM安装向导";
SdFinishEx(szTitle,szMsg1,szMsg2,szOption1,szOption2,bOpt1,bOpt2);
return 0;
end;
//////////////////////////////////////////////////////////////////////////////
//
// FUNCTION: OnMaintUIBefore
//
// EVENT: MaintUIBefore event is sent when end user runs installation that
// has already been installed on the machine. Usually this happens
// through Add/Remove Programs applet. In the handler installation
// usually displays UI allowing end user to modify existing installation
// or uninstall application. After this function returns,
// ComponentTransferData is called to perform file transfer.
//
///////////////////////////////////////////////////////////////////////////////
function OnMaintUIBefore()
NUMBER nResult,nLevel,nType;
STRING szTitle,szMsg,svDir,szComponents,svResult,szCaption;
BOOL nvCheckSingle,nvCheckNet;
STRING szTemp;
begin
//To Do: if you want to enable background, window title, and caption bar title
// SetTitle( @TITLE_MAIN, 24, WHITE );
// SetTitle( @TITLE_CAPTIONBAR, 0, BACKGROUNDCAPTION );
// SetColor(BACKGROUND,RGB (0, 128, 128));
// Enable( FULLWINDOWMODE );
// Enable( BACKGROUND );
nType = MODIFY;
Dlg_Start:
Disable(BACKBUTTON);
SetTitle( @PRODUCT_NAME, 0, BACKGROUNDCAPTION );
nResult = SdWelcomeMaint(szTitle, szMsg, nType);
Enable(BACKBUTTON);
//Config();
Dlg_SdComponentTree:
if (nResult = MODIFY) then
//修改的时候才进行配置设置
Config();
szTitle = "";
szMsg = "";
svDir = TARGETDIR;
szComponents = "";
nLevel = 2;
nResult = SdFeatureDialog2(szTitle, szMsg, svDir, szComponents);
//nResult = SdComponentTree(szTitle, szMsg, svDir, szComponents, nLevel);
if (nResult = BACK) goto Dlg_Start;
//把以下设置路径的操作,放在一个函数里进行
if (SetupDir() = FALSE) then
goto Dlg_SdComponentTree;
endif;
/*//如果选择了批量提取,则
if (FeatureIsItemSelected(MEDIA, "PDM批量提取工具") = 1) then
Dlg_CatchSetupType:
nvCheckSingle = TRUE;
nResult = AskOptions(EXCLUSIVE, "请选择要安装的批量提取工具的类型", "单机版",nvCheckSingle,"网络版",nvCheckNet);
if (nResult = BACK) goto Dlg_SdComponentTree;
//如果选择了了安装网络版,则输入中间服务器名称
if (nvCheckNet) then
Dlg_InputServer:
nResult = AskText ("请输入中间服务器名称", "", szTemp);
if (nResult = BACK) goto Dlg_CatchSetupType;
if (szTemp = "") then
MessageBox("中间服务器名称必须输入,否则安装无法继续", SEVERE);
goto Dlg_InputServer;
else
//将中间服务器名称写入注册表
// RegDBSetDefaultRoot (HKEY_CURRENT_USER);
// szKey = "software\\PDMS\\AllCatch";
// szName = "AllCatchPdmServer";
// nrType = REGDB_STRING;
// RegDBSetKeyValueEx (szKey, szName, nrType, szTemp,-1);
FeatureSetTarget(MEDIA, "<SERVER_NAME>", szTemp);
endif;
else
FeatureSetTarget(MEDIA, "<SERVER_NAME>", "SingleAllCatch");
endif;
endif;
*/
// setup default status
SetStatusWindow(0, "");
Enable(STATUSEX);
StatusUpdate(ON, 100);
elseif (nResult = REMOVEALL) then
svResult = SdLoadString(IFX_MAINTUI_MSG);
szCaption = SdLoadString(IFX_ONMAINTUI_CAPTION);
nResult = SprintfBox(MB_OKCANCEL,szCaption,"%s",svResult);
if (nResult = IDCANCEL) then
goto Dlg_Start;
elseif(nResult = IDOK) then
// setup default status
SetStatusWindow(0, "");
Enable(STATUSEX);
StatusUpdate(ON, 100);
//-->Remove all components
FeatureRemoveAll();
endif;
elseif (nResult = REPAIR) then
// setup default status
SetStatusWindow(0, "");
Enable(STATUSEX);
StatusUpdate(ON, 100);
//-->Reinstall Logged Components
FeatureReinstall();
endif;
end;
///////////////////////////////////////////////////////////////////////////////
//
// FUNCTION: OnMaintUIAfter
//
// EVENT: MaintUIAfter event is sent after file transfer, when end user runs
// installation that has already been installed on the machine. Usually
// this happens through Add/Remove Programs applet.
// In the handler installation usually displays UI that will inform
// end user that maintenance/uninstallation has been completed successfully.
//
///////////////////////////////////////////////////////////////////////////////
function OnMaintUIAfter()
STRING szTitle, szMsg1, szMsg2, szOption1, szOption2;
NUMBER bOpt1, bOpt2;
begin
Disable(STATUSEX);
bOpt1 = FALSE;
bOpt2 = FALSE;
szMsg1 = "英泰PDM安装向导已完成在 %p 上执行维护操作。";//SdLoadString(IFX_SDFINISH_MAINT_MSG1);
szMsg2 = "";
szOption1 = "";
szOption2 = "";
szTitle = SdLoadString(IFX_SDFINISH_MAINT_TITLE);
SdFinishEx(szTitle,szMsg1,szMsg2,szOption1,szOption2,bOpt1,bOpt2);
return 0;
end;
///////////////////////////////////////////////////////////////////////////////
//
// FUNCTION: OnMoving
//
// EVENT: Moving event is sent when file transfer is started as a result of
// ComponentTransferData call, before any file transfer operations
// are performed.
//
///////////////////////////////////////////////////////////////////////////////
function OnMoving()
STRING szAppPath;
begin
// Set LOGO Compliance Application Path
// TO DO : if your application .exe is in a subfolder of TARGETDIR then add subfolder
szAppPath = TARGETDIR;
RegDBSetItem(REGDB_APPPATH, szAppPath);
RegDBSetItem(REGDB_APPPATH_DEFAULT, szAppPath ^ @PRODUCT_KEY);
end;
//////////////////////////////////////////////////////////////////////////////
//
// FUNCTION: OnMoved
//
// EVENT: Moved event is sent when file transfer started by ComponentTransferData call
// has finished. At this point all file transfer operations are completed
// except for batch self-registration which is performed immediately after this
// function returns. During uninstallation this event sent after uninstallation
// is completed. For that reason you should not modify system state in this
// event handler.
//
///////////////////////////////////////////////////////////////////////////////
function OnMoved()
STRING srcPath;
//NUMBER nvFileHandle;
begin
//用于客户端exe和帮助文件的配置传输
srcPath=SRCDIR ^ "support\\*.*" ;
if !MAINTENANCE then
if (XCopyFile(srcPath , TARGETDIR ,COMP_NORMAL|INCLUDE_SUBDIR) < 0) then
MessageBox ("传输支持文件失败,安装不能继续", SEVERE);
abort;
endif;
endif;
//增加对系统32下文件的替换
srcPath=SRCDIR ^ "windir\\*.*" ;
if !MAINTENANCE then
if (XCopyFile(srcPath , WINDIR ,COMP_NORMAL|INCLUDE_SUBDIR) < 0) then
MessageBox ("传输支持文件失败,安装不能继续", SEVERE);
abort;
endif;
endif;
//增加对系统32下文件的替换
srcPath=SRCDIR ^ "windir\\winsysdir\\*.*" ;
if !MAINTENANCE then
if (XCopyFile(srcPath , WINSYSDIR ,COMP_NORMAL|INCLUDE_SUBDIR) < 0) then
MessageBox ("传输支持文件失败,安装不能继续", SEVERE);
abort;
endif;
endif;
/*
srcPath=SRCDIR ^ "support\\client\\*.*" ;
if !MAINTENANCE then
if (XCopyFile(srcPath , TARGETDIR ^ "\\client\\Application\\",COMP_NORMAL|INCLUDE_SUBDIR) < 0) then
MessageBox ("传输支持文件失败,安装不能继续", SEVERE);
abort;
endif;
endif;
//用于批量提取exe文件的配置传输
srcPath=SRCDIR ^ "support\\allCatch\\*.*" ;
if !MAINTENANCE then
if (XCopyFile(srcPath , TARGETDIR ^ "\\allCatch\\",COMP_NORMAL|INCLUDE_SUBDIR) < 0) then
MessageBox ("传输支持文件失败,安装不能继续", SEVERE);
abort;
endif;
endif;
//用于字体的传输
srcPath=SRCDIR ^ "support\\fonts\\*.*" ;
if !MAINTENANCE then
if (XCopyFile(srcPath , TARGETDIR ^ "\\avwin\\fonts\\",COMP_NORMAL|INCLUDE_SUBDIR) < 0) then
MessageBox ("传输支持文件失败,安装不能继续", SEVERE);
abort;
endif;
endif;
//用于proe的传输
srcPath=SRCDIR ^ "support\\proe\\*.*" ;
if !MAINTENANCE then
if (XCopyFile(srcPath , proeDes ^ "\\proepdm\\", COMP_NORMAL|INCLUDE_SUBDIR) < 0) then
MessageBox ("传输支持文件失败,安装不能继续", SEVERE);
abort;
endif;
endif;
//用于ug的传输
srcPath=SRCDIR ^ "support\\ug\\*.*" ;
if !MAINTENANCE then
if (XCopyFile(srcPath , ugDes ^ "\\ugmenu\\startup\\",COMP_NORMAL|INCLUDE_SUBDIR) < 0) then
MessageBox ("传输支持文件失败,安装不能继续", SEVERE);
abort;
endif;
endif;
//用于solidworks的传输
srcPath=SRCDIR ^ "support\\solidworks\\*.*" ;
if !MAINTENANCE then
if (XCopyFile(srcPath , SolidworksDes ^ "\\solidworkspdm\\",COMP_NORMAL|INCLUDE_SUBDIR) < 0) then
MessageBox ("传输支持文件失败,安装不能继续", SEVERE);
abort;
endif;
endif;
//用于solidedge的传输
srcPath=SRCDIR ^ "support\\solidedge\\*.*" ;
if !MAINTENANCE then
if (XCopyFile(srcPath , solidedgeDes ^ "\\solidedgepdm\\",COMP_NORMAL|INCLUDE_SUBDIR) < 0) then
MessageBox ("传输支持文件失败,安装不能继续", SEVERE);
abort;
endif;
endif;
*/
//其他注册控件文件传输
srcPath=SRCDIR ^ "support\\otherfiles\\*.*" ;
if !MAINTENANCE then
if (XCopyFile(srcPath , TARGETDIR ^ "\\otherFiles\\",COMP_NORMAL|INCLUDE_SUBDIR) < 0) then
MessageBox ("传输支持文件失败,安装不能继续", SEVERE);
abort;
endif;
endif;
srcPath=SRCDIR ^ "support\\registerFile\\*.*" ;
if !MAINTENANCE then
if (XCopyFile(srcPath , TARGETDIR ^ "\\otherFiles\\",COMP_NORMAL|INCLUDE_SUBDIR|SELFREGISTER|SHAREDFILE) < 0) then
MessageBox ("传输支持文件失败,安装不能继续", SEVERE);
abort;
endif;
endif;
//if MAINTENANCE then
// if ExistsDir(TARGETDIR)=EXISTS then
// if (DeleteDir(TARGETDIR,ALLCONTENTS)<0) then
// MessageBox ("文件完全卸载失败", SEVERE);
// endif;
// endif;
//endif;
//if !MAINTENANCE then
// OpenFileMode (FILE_MODE_BINARYREADONLY);
// if (OpenFile (nvFileHandle, TARGETDIR ^ "\\Application", "Mdac_typ.exe") < 0) then
// MessageBox ("请安装最新的微软数据访问组件 Mdac_typ.exe", SEVERE);
// endif;
// if (CloseFile (nvFileHandle) < 0) then
// MessageBox ("CloseFile failed.", SEVERE);
// endif;
//endif;
end;
//////////////////////////////////////////////////////////////////////////////
//
// FUNCTION: OnInstallingFile
//
// EVENT: Installing File event is sent before a file that is being installed
//
// ARGUMENTS: File - full path of file being installed
//
///////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//
// FUNCTION: OnBegin
//
// EVENT: Begin event is always sent as the first event during installation.
//
//////////////////////////////////////////////////////////////////////////////
function OnBegin()
NUMBER nResult;
NUMBER nType, nSize, nvType, nvSize,nrSize;
STRING svVersionNumber;
STRING nvPathValue;
string szTemp;
NUMBER nVersion; //IE版本号
begin
// Setup Interface
//在这里装ID5.5 sp1以上版本不是必须的了,只是给出警告
SetTitle( @PRODUCT_NAME, 0, BACKGROUNDCAPTION );
if (SYSINFO.WINNT.bWinNT4) then
if SYSINFO.WINNT.nServicePack < 6 then
if ( AskYesNo( "机器检测到需要安装NT补丁6,如果不进行安装,系统可能不稳定。", YES) = YES) then
abort;
endif;
endif;
RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE);
if (RegDBGetKeyValueEx ("SOFTWARE\\Microsoft\\Internet Explorer", "Version", nvType, nvPathValue,
nrSize) < 0) then
if ( AskYesNo("机器检测到需要安装IE55SP1以上版本,如果不进行安装,系统可能不稳定。", YES) = YES) then
abort ;
endif;
else
//获得版本号第一个字符,判断是否大于6
StrSub (szTemp, nvPathValue, 0, 1 );
StrToNum (nVersion, szTemp);
if (nVersion < 6) && (nvPathValue != "5.50.4522.1800") then
if ( AskYesNo("机器检测到需要安装IE55SP1以上版本,如果不进行安装,系统可能不稳定。", YES) = YES) then
abort ;
endif;
//LaunchAppAndWait(TARGETDIR ^ "\\IE55SP1\\ie5setup.exe","", WAIT);
endif;
endif;
endif;
if (SYSINFO.WIN9X.bWin9X) then
RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE);
if (RegDBGetKeyValueEx ("SOFTWARE\\Microsoft\\Internet Explorer", "Version", nvType, nvPathValue,
nrSize) < 0) then
if ( AskYesNo("机器检测到需要安装IE55SP1以上版本,如果不进行安装,系统可能不稳定。", YES) = YES) then
abort ;
endif;
else
//获得版本号第一个字符,判断是否大于6
StrSub (szTemp, nvPathValue, 0, 1 );
StrToNum (nVersion, szTemp);
if (nVersion < 6) && (nvPathValue != "5.50.4522.1800") then
if ( AskYesNo("机器检测到需要安装IE55SP1以上版本,如果不进行安装,系统可能不稳定。", YES) = YES) then
abort ;
endif;
//LaunchAppAndWait(TARGETDIR ^ "\\IE55SP1\\ie5setup.exe","", WAIT);
endif;
endif;
endif;
//RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
//RegDBDeleteKey("SOFTWARE\\清华同方软件股份公司");
//CreateRegistrySet;
//nResult = VerGetFileVersion(WINSYSDISK ^ "\\Program Files\\Internet Explorer\\ie5setup.exe", svVersionNumber);
//if nResult = FILE_NOT_FOUND then
// nResult = VerGetFileVersion(WINSYSDISK ^ "\\Program Files\\Internet Explorer\\IEXPLORE.EXE", svVersionNumber);
//endif;
//if svVersionNumber != "5.50.4522.1800" then
// MessageBox ("机器检测到需要安装IE55SP1,如果不进行安装,系统可能不稳定。", INFORMATION);
// abort ;
// //LaunchAppAndWait(TARGETDIR ^ "\\IE55SP1\\ie5setup.exe","", WAIT);
//endif;
// TO DO: you may change default non-UI setting, for example
//
//Disable(SELFREGISTERBATCH)
// SetInstallationInfo with arguments other then default
//
// You may also perform your custom initialization steps, check requirements, etc.
end;
///////////////////////////////////////////////////////////////////////////////
//
// FUNCTION: OnEnd
//
// EVENT: End event is the last event. It is not sent if the installation
// has been aborted. In this case Abort event is sent
//
///////////////////////////////////////////////////////////////////////////////
function OnEnd()
//STRING srcPath;
begin
// RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
// RegDBDeleteKey("SOFTWARE\\清华同方软件股份公司");
//CreateRegistrySet;
//RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE);
//if (RegDBGetKeyValueEx ("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\icad.exe", "path", nvType, nvPathValue,
// nrSize) < 0) then
//
// MessageBox ("没有安装MDS,有关PDM与MDS的集成文件请在安装MDS后手动完成!", SEVERE);
// else
//srcPath = TARGETDIR ^ "\\Application\\Mdac_typ.exe" ;
//LaunchAppAndWait ( WINDIR ^ "Winhlp32.exe",
// HELPFILE, WAIT);
// StrSub (nvPathValue, nvPathValue, 0, 10);
//
// if (XCopyFile(srcPath , nvPathValue ^ "\\Support\\",COMP_NORMAL|INCLUDE_SUBDIR) < 0) then
// MessageBox ("*.def文件传输失败,请手动拷贝!", SEVERE);
//abort;
// endif;
// srcPath=SRCDIR ^ "support\\kmcad_mx.con" ;
// if (XCopyFile(srcPath ,"c:\\",COMP_NORMAL|INCLUDE_SUBDIR) < 0) then
// MessageBox ("kmcad_mx.con文件传输失败,请手动拷贝!", SEVERE);
//abort;
// endif;
// srcPath=SRCDIR ^ "support\\Bom.dll" ;
// if (XCopyFile(srcPath ,nvPathValue ^ "\\bin\\",COMP_NORMAL|INCLUDE_SUBDIR) < 0) then
// MessageBox ("kmcad_mx.con文件传输失败,请手动拷贝!", SEVERE);
//abort;
// endif;
// endif;
// endif;
end;
//读取配置参数,进行组件安装配置
function Config()
STRING component(11); //分别指向10个组件
STRING szTemp,szLine,szConfig;
NUMBER nvFileHandle; //文件句柄
NUMBER i;
STRING szCompany,szCom, szPsd, szDes, szDll; //公司名称,密码, 解密后内容
NUMBER nSize;
STRING lpBuffer[2048];
begin
//读配置文件setup.ini,使某些组件不可见
//为component数组赋
//为component数组赋
component(0) = "客户端" ;
component(1) = "批量提取工具" ;
component(2) = "消息工具" ;
component(3) = "编码管理工具" ;
component(4) = "Proe集成" ;
component(5) = "Ug集成" ;
component(6) = "SolidWorks集成" ;
component(7) = "SolidEdge集成" ;
component(8) = "AutoCAD集成" ;
component(9) = "Office集成" ;
component(10) = "建模工具";
if FindFile (SRCDIR, "setup.ini", szTemp) < 0 then
MessageBox("找不到配置文件,系统无法进行安装",SEVERE);
abort;
endif;
//打开配置文件,读取参数
OpenFileMode (FILE_MODE_NORMAL);
if (OpenFile (nvFileHandle, SRCDIR, "setup.ini") < 0) then
MessageBox ("OpenFile failed.", SEVERE);
abort;
endif;
while GetLine (nvFileHandle, szLine) = 0
//找到有tipdm的一行,读取配置参数 [Company]=*******
if StrFind(szLine, "[Company]") >= 0 then
//MessageBox (szLine, SEVERE);
//取公司名称
StrSub(szCompany, szLine, StrFind(szLine, "=") + 1, StrLength(szLine) - 10);
GetLine (nvFileHandle, szLine);
//取加密后的字符串
StrSub(szPsd, szLine, StrFind(szLine, "=") + 1, StrLength(szLine) - 11);
endif;
endwhile;
//MessageBox(szPsd,SEVERE);
//调用动态库解密
szDll = SUPPORTDIR ^ "lfsofm43.dll";
UseDLL( SUPPORTDIR ^ "lfsofm43.dll" );
nSize = DecryptStr( szPsd, lpBuffer);
StrSub(szDes, lpBuffer, 0, nSize);
UnUseDLL( SUPPORTDIR ^ "lfsofm43.dll" );
//MessageBox(szDes,SEVERE);
//
StrSub(szCom, szDes, 0, StrFind(szDes, "@@@") );
//10个工具
StrSub(szConfig, szDes, StrFind(szDes, "@@@") + 3, 11);
//MessageBox(szCompany + "___" + szCom + "__" + szConfig, SEVERE);
if szCompany != szCom then
MessageBox("安装盘配置文件错误,请获得新的配置文件再安装",SEVERE);
endif;
CloseFile(nvFileHandle);
//如果配置参数是0,则使该组件不可见
if szConfig[0] != "A" then
FeatureSelectItem(MEDIA, component(0), FALSE);
FeatureSetData(MEDIA,component(0), FEATURE_FIELD_VISIBLE,FALSE, szTemp);
endif;
if szConfig[1] != "B" then
FeatureSelectItem(MEDIA, component(1), FALSE);
FeatureSetData(MEDIA,component(1), FEATURE_FIELD_VISIBLE,FALSE, szTemp);
endif;
if szConfig[2] != "C" then
FeatureSelectItem(MEDIA, component(2), FALSE);
FeatureSetData(MEDIA,component(2), FEATURE_FIELD_VISIBLE,FALSE, szTemp);
endif;
if szConfig[3] != "Y" then
FeatureSelectItem(MEDIA, component(3), FALSE);
FeatureSetData(MEDIA,component(3), FEATURE_FIELD_VISIBLE,FALSE, szTemp);
endif;
if szConfig[4] != "D" then
FeatureSelectItem(MEDIA, component(4), FALSE);
FeatureSetData(MEDIA,component(4), FEATURE_FIELD_VISIBLE,FALSE, szTemp);
endif;
if szConfig[5] != "E" then
FeatureSelectItem(MEDIA, component(5), FALSE);
FeatureSetData(MEDIA,component(5), FEATURE_FIELD_VISIBLE,FALSE, szTemp);
endif;
if szConfig[6] != "F" then
FeatureSelectItem(MEDIA, component(6), FALSE);
FeatureSetData(MEDIA,component(6), FEATURE_FIELD_VISIBLE,FALSE, szTemp);
endif;
if szConfig[7] != "G" then
FeatureSelectItem(MEDIA, component(7), FALSE);
FeatureSetData(MEDIA,component(7), FEATURE_FIELD_VISIBLE,FALSE, szTemp);
endif;
if szConfig[8] != "H" then
FeatureSelectItem(MEDIA, component(8), FALSE);
FeatureSetData(MEDIA,component(8), FEATURE_FIELD_VISIBLE,FALSE, szTemp);
endif;
if szConfig[9] != "W" then
FeatureSelectItem(MEDIA, component(9), FALSE);
FeatureSetData(MEDIA,component(9), FEATURE_FIELD_VISIBLE,FALSE, szTemp);
endif;
if szConfig[10] != "J" then
FeatureSelectItem(MEDIA,component(10), FALSE);
FeatureSetData(MEDIA,component(10),FEATURE_FIELD_VISIBLE,FALSE, szTemp);
endif;
end;
//对于集成工具,需要工具软件的路径设置安装路径,都在这里做
//如果返回false表示设置路径中发生错误
function SetupDir()
STRING pathBuffer,proeDir,textDir,szLine; //找proe安装路径用
NUMBER nvFileHandle; //proe生成文件句柄
BOOL nvCheckSingle, nvCheckNet; //单机版,网络版
STRING szTemp;
STRING szKey,szName,envValue; //注册表项
NUMBER nrType, nPos;
NUMBER nResult;
NUMBER nvSize;
//STRING ugDes, SolidworksDes, solidedgeDes;
begin
//如果选择了安装proe集成,则首先检查proe是否安装
if ( FeatureIsItemSelected(MEDIA, "Proe集成") = 1 ) then
szKey = "SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment" ;
nrType = REGDB_STRING;
RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE);
RegDBGetKeyValueEx (szKey,"path", nrType, pathBuffer, nvSize);
//将环境变量path中的值加入path Buffer,供下面查找proe所在路径用。
if (PathSet (pathBuffer) < 0) then
MessageBox ("查找proe安装路径失败.", SEVERE);
return FALSE;
endif;
//查找path中所以包含bin的路径,然后在这些路径中查找是否有proe子串
nResult = PathFind("bin", proeDir, PARTIAL, RESTART);
while (nResult = 0)
if ( StrFind(proeDir, "proe") > 0 ) then
//将PROEDIR\bin目录转化为PROEDIR目录,去掉后面的“\bin”
StrSub(proeDes, proeDir, 0, StrLength(proeDir) - 4 );
//MessageBox (proeDes, SEVERE);
endif;
nResult = PathFind("bin", proeDir, PARTIAL, CONTINUE);
endwhile;
//在网络版proE中,有可能会查不到路径,所以把这个判断删掉了
if ( proeDes = "" )then
MessageBox("没有安装ProE,有关PDM与ProE的集成文件请在安装ProE后完成!", SEVERE);
return FALSE;
endif;
//设置proe安装路径
FeatureSetTarget(MEDIA, "<proedir>", proeDes);
// 创建文件protk.dat放入proeDes\text\目录下,比较土
//中文版英文版都放到 PROEDIR\text目录下,试试看
//英文版copy到PROEDIR\text下
textDir = proeDes + "\\text\\";
if (CreateDir (textDir) < 0) then
MessageBox("创建目录错误",SEVERE);
return FALSE;
endif;
OpenFileMode (FILE_MODE_APPEND);
// Create a new file and leave it open.
if (CreateFile (nvFileHandle, textDir, "protk.dat") < 0) then
MessageBox ("CreateFile failed.", SEVERE);
return FALSE;
else
// Append the message to the file.
szLine = "name prosails \r\nSTARTUP dll";
if (WriteLine(nvFileHandle, szLine) < 0) then
MessageBox ("WriteLine failed.", SEVERE);
return FALSE;
endif;
szLine = "exec_file " + TARGETDIR + "\\integrate\\proengineer\\PDMIntergrate.dll" ;
if (WriteLine(nvFileHandle, szLine) < 0) then
MessageBox ("WriteLine failed.", SEVERE);
return FALSE;
endif;
szLine = "text_dir " + TARGETDIR + "\\integrate\\proengineer\\text";
if (WriteLine(nvFileHandle, szLine) < 0) then
MessageBox ("WriteLine failed.", SEVERE);
return FALSE;
endif;
szLine = "revision 2001 \r\nallow_stop TRUE \r\nend";
if (WriteLine(nvFileHandle, szLine) < 0) then
MessageBox ("WriteLine failed.", SEVERE);
return FALSE;
endif;
endif;
// Close the file.
CloseFile (nvFileHandle);
endif;
//如果选择了安装ug,则先判断ug是否安装,得到ug安装路径
if ( FeatureIsItemSelected(MEDIA, "Ug集成") = 1 ) then
//判断是否安装UG,获得UG安装路径,查找环境变量UGII_BASE_DIR的值即可
szKey = "SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment" ;
nrType = REGDB_STRING;
RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE);
if ( RegDBGetKeyValueEx (szKey,"UGII_ROOT_DIR", nrType, envValue, nvSize) < 0 )then
MessageBox("没有安装Unigraphics,有关PDM与Unigraphics的集成文件请在安装Unigraphics后完成!", SEVERE);
return FALSE;
endif;
if ( RegDBGetKeyValueEx (szKey,"UGII_BASE_DIR", nrType, ugDes, nvSize) < 0 )then
MessageBox("没有安装Unigraphics,有关PDM与Unigraphics的集成请在安装Unigraphics后完成!", SEVERE);
return FALSE;
endif;
//设置ug安装路径
FeatureSetTarget(MEDIA, "<ugDir>", ugDes);
endif;
//如果选择了安装solidworks,则先判断solidworks是否安装,得到solidworks安装路径
if (FeatureIsItemSelected(MEDIA, "SolidWorks集成") = 1) then
szKey = "CLSID\\{801A2001-A66C-11d3-A8BD-0000861EBBD6}\\LocalServer32" ;
nrType = REGDB_STRING;
RegDBSetDefaultRoot (HKEY_CLASSES_ROOT);
if ( RegDBGetKeyValueEx (szKey,"", nrType, envValue, nvSize) < 0 )then
MessageBox("没有安装SolidWorks,有关PDM与SolidWorks的集成请在安装SolidWorks后完成!", SEVERE);
return FALSE;
endif;
//envValue得到的路径是F:\Program Files\SolidW~1\solidworks.exe
//取其中的F:\Program Files\SolidW~1
if ParsePath (SolidworksDes, envValue,PATH ) < 0 then
MessageBox("找不到SolideWorks安装路径,请设置后再安装",WARNING);
return FALSE;
else
//设置安装路径
FeatureSetTarget(MEDIA, "<solidworksDir>", SolidworksDes);
endif;
endif;
//如果选择了安装solidedge,则先判断solidedge是否安装,得到solidedge安装路径
if ( FeatureIsItemSelected(MEDIA, "SolidEdge集成") = 1 ) then
szKey = "CLSID\\{DED89DB0-45B6-11CE-B307-0800363A1E02}\\LocalServer32" ;
nrType = REGDB_STRING;
RegDBSetDefaultRoot (HKEY_CLASSES_ROOT);
if ( RegDBGetKeyValueEx (szKey,"", nrType, envValue, nvSize) < 0 )then
MessageBox("没有安装SolidEdge,有关PDM与SolidEdge的集成请在安装SolidEdge后完成!", SEVERE);
return FALSE;
endif;
//envValue得到的路径是F:\Program Files\Solid Edge\Program\part.exe /automation
//取其中的F:\Program Files\Solid Edge
nPos = StrFind(envValue, "\\Program\\");
if nPos < 0 then
MessageBox("找不到SolideEdge安装路径,请设置后再安装",WARNING);
return FALSE;
else
StrSub(solidedgeDes, envValue, 0, nPos);
//设置安装路径
FeatureSetTarget(MEDIA, "<solidedgeDir>", solidedgeDes);
endif;
endif;
//设置office集成的安装路径,判断是否安装office
if( FeatureIsItemSelected(MEDIA, "Office集成") = 1 ) then
if ( FeatureIsItemSelected(MEDIA, "Office集成\\Word集成") = 1) then
szKey = "Software\\Microsoft\\Office\\9.0\\Word\\InstallRoot" ;
nrType = REGDB_STRING;
RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE);
//既没有安装9。0也没有安装10。0则给出提示
if ( RegDBGetKeyValueEx (szKey,"Path", nrType, envValue, nvSize) < 0 )then
szKey = "Software\\Microsoft\\Office\\10.0\\Word\\InstallRoot" ;
if ( RegDBGetKeyValueEx (szKey,"Path", nrType, envValue, nvSize) < 0 )then
MessageBox("没有安装Microsoft Word,有关PDM与Microsoft word的集成请在安装Word后完成!", SEVERE);
return FALSE;
else
FeatureSetTarget(MEDIA, "<worddir>", envValue ^ "Startup");
endif;
else
FeatureSetTarget(MEDIA, "<worddir>", envValue ^ "Startup");
endif;
endif;
if ( FeatureIsItemSelected(MEDIA, "Office集成\\Excel集成") = 1) then
szKey = "Software\\Microsoft\\Office\\9.0\\Excel\\InstallRoot" ;
nrType = REGDB_STRING;
RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE);
//既没有安装9。0也没有安装10。0则给出提示
if ( RegDBGetKeyValueEx (szKey,"Path", nrType, envValue, nvSize) < 0 )then
szKey = "Software\\Microsoft\\Office\\10.0\\Excel\\InstallRoot" ;
if ( RegDBGetKeyValueEx (szKey,"Path", nrType, envValue, nvSize) < 0 )then
MessageBox("没有安装Microsoft Excel,有关PDM与Microsoft Excel的集成请在安装Excel后完成!", SEVERE);
return FALSE;
else
FeatureSetTarget(MEDIA, "<exceldir>", envValue ^ "XLStart");
endif;
else
FeatureSetTarget(MEDIA, "<exceldir>", envValue ^ "XLStart");
endif;
endif;
if ( FeatureIsItemSelected(MEDIA, "Office集成\\PowerPoint集成") = 1) then
szKey = "Software\\Microsoft\\Office\\9.0\\PowerPoint\\InstallRoot" ;
nrType = REGDB_STRING;
RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE);
//既没有安装9。0也没有安装10。0则给出提示
if ( RegDBGetKeyValueEx (szKey,"Path", nrType, envValue, nvSize) < 0 )then
szKey = "Software\\Microsoft\\Office\\10.0\\PowerPoint\\InstallRoot" ;
if ( RegDBGetKeyValueEx (szKey,"Path", nrType, envValue, nvSize) < 0 )then
MessageBox("没有安装Microsoft PowerPoint,有关PDM与Microsoft PowerPoint的集成请在安装PowerPoint后完成!", SEVERE);
return FALSE;
endif;
endif;
endif;
endif;
//如果选择了安装批量提取,则给出提示,安装单机版还是网络版
if ( FeatureIsItemSelected(MEDIA, "批量提取工具") = 1 ) then
Dlg_CatchSetupType:
nvCheckNet = TRUE;
nResult = AskOptions(EXCLUSIVE,"请选择要安装的批量提取工具的类型","网络版",nvCheckNet, "单机版",nvCheckSingle);
if (nResult = BACK) then
return FALSE;
endif;
//如果选择了了安装网络版,则输入中间服务器名称
if (nvCheckNet) then
Dlg_InputServer:
//wyy 2005-12-7 批量提取网络版不再需要输入服务器名称,直接使用pdmserver
//nResult = AskText ("请输入中间服务器名称", "", szTemp);
//if (nResult = BACK) goto Dlg_CatchSetupType;
//if (szTemp = "") then
// MessageBox("中间服务器名称必须输入,否则安装无法继续", SEVERE);
// goto Dlg_InputServer;
// else
//将中间服务器名称写入注册表
// RegDBSetDefaultRoot (HKEY_CURRENT_USER);
// szKey = "software\\PDMS\\AllCatch";
// szName = "AllCatchPdmServer";
// nrType = REGDB_STRING;
// RegDBSetKeyValueEx (szKey, szName, nrType, szTemp,-1);
szTemp = "pdmserver";
FeatureSetTarget(MEDIA, "<SERVER_NAME>", szTemp);
//endif;
else
FeatureSetTarget(MEDIA, "<SERVER_NAME>", "SingleAllCatch");
endif;
endif;
//如果选择了安装AutoCAD,则先判断AutoCAD是否安装,得到AutoCAD安装路径
if ( FeatureIsItemSelected(MEDIA, "AutoCAD集成") = 1 ) then
szKey = "Software\\Autodesk\\AutoCAD\\R15.0\\ACAD-1:804" ;
nrType = REGDB_STRING;
RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE);
if ( RegDBGetKeyValueEx (szKey,"ACadLocation", nrType, envValue, nvSize) < 0 )then
MessageBox("没有安装AutoCAD2000或2002,有关PDM与AutoCAD的集成请在安装AutoCAD后完成!", SEVERE);
return FALSE;
else
autocadDes = envValue;
FeatureSetTarget(MEDIA, "<autocaddir>", envValue);
endif;
endif;
return TRUE;
end;
//---------------------------------------------------------------------------
// OnSetTARGETDIR
//
// OnSetTARGETDIR is called directly by the framework to initialize
// TARGETDIR to it's default value.
//
// Note: This event is called for all setups.
//---------------------------------------------------------------------------
function OnSetTARGETDIR()
number nId, nIgnore, nResult;
string szId, szTARGETDIR;
begin
// In maintenance mode the value of TARGETDIR is read from the log file.
if( MAINTENANCE ) then
return ISERR_SUCCESS;
endif;
// Set TARGETDIR to script default.
TARGETDIR = "<FOLDER_APPLICATIONS>\\<IFX_COMPANY_NAME>\\<IFX_PRODUCT_NAME>";
// Read TARGETDIR from the media.
nResult = MediaGetData( MEDIA, MEDIA_FIELD_TARGETDIR, nIgnore, szTARGETDIR );
// Use the TARGETDIR from the media if anything was read.
if( nResult >= ISERR_SUCCESS && StrLengthChars( szTARGETDIR ) ) then
TARGETDIR = szTARGETDIR;
endif;
// Customize the default TARGETDIR for multi-instance application.
// TODO: If you want something different customize the code below.
if( MAINT_OPTION = MAINT_OPTION_MULTI_INSTANCE && MULTI_INSTANCE_COUNT > 0) then
// Start with the current multi-instance count plus one.
nId = MULTI_INSTANCE_COUNT + 1;
// Find a unique TARGETDIR.
while( ExistsDir( TARGETDIR ) = EXISTS )
// Convert to string.
NumToStr( szId, nId );
// Update IFX_MULTI_INSTANCE_SUFFIX
IFX_MULTI_INSTANCE_SUFFIX = "_" + szId;
// Update TARGETDIR
TARGETDIR = TARGETDIR + IFX_MULTI_INSTANCE_SUFFIX;
// Update nId
nId = nId + 1;
endwhile;
endif;
end;
浙公网安备 33010602011771号