- 浏览: 54591 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
chengcwn:
,正解!
Proguard对于泛型的支持 -
kolor:
谢谢,正需要
Proguard对于泛型的支持 -
abckiller:
不错!
关于ibatis中like用法的补充
曾经使用installshield制作的安装程序,包括Mysql初始化、安装jre、配置环境变量、简单注册码生成。
//////////////////////////////////////////////////////////////////////////////// // // File Name: Setup.rul // // Description: InstallShield script // // Comments: This script was generated based on the selections you made in // the Project Wizard. Refer to the help topic entitled "Modify // the script that the Project Wizard generates" for information // on possible next steps. // /////////////////////////////////////////////an/////////////////////////////////// // Include header files #include "ifx.h" ////////////////////// string defines //////////////////////////// //////////////////// installation declarations /////////////////// // ----- DLL function prototypes ----- // your DLL function prototypes // ---- script function prototypes ----- // your script function prototypes // your global variables NUMBER volumeNum; //Before using the GetVolumeInformation API you will need to prototype it prototype KERNEL32.GetVolumeInformation(BYREF STRING, BYREF STRING, NUMBER, BYREF NUMBER, BYREF NUMBER, BYREF NUMBER, BYREF STRING, NUMBER); //prototype for the custom InstallScript function prototype GetVolumeSerial(); //function definition function GetVolumeSerial() STRING lpRootPathName; STRING lpVolumeNameBuffer; NUMBER nVolumeNameSize; NUMBER lpVolumeSerialNumber; NUMBER lpMaximumComponentLength; NUMBER lpFileSystemFlags; STRING lpFileSystemNameBuffer; NUMBER nFileSystemNameSize; BOOL APIReturn; begin lpRootPathName="d:\\"; nVolumeNameSize=60; nFileSystemNameSize=60; //APIReturn=GetVolumeInformation(lpRootPathName, lpVolumeNameBuffer, nVolumeNameSize, lpVolumeSerialNumber, lpMaximumComponentLength, lpFileSystemFlags, lpFileSystemNameBuffer, nFileSystemNameSize); APIReturn=GetVolumeInformation(lpRootPathName, lpVolumeNameBuffer, nVolumeNameSize, lpVolumeSerialNumber, lpMaximumComponentLength, lpFileSystemFlags, lpFileSystemNameBuffer, nFileSystemNameSize); if (APIReturn) then volumeNum = lpVolumeSerialNumber ; if (volumeNum < 0) then volumeNum = 0 - volumeNum; endif; //NumToStr(volumeNum,lpVolumeSerialNumber); //SprintfBox(INFORMATION, "", "Volume= %s\nVolume Serial= %d", lpRootPathName, lpVolumeSerialNumber); if (volumeNum > 2139999999 - 135792468) then //volumeNum = 123456789; volumeNum = volumeNum - volumeNum/100000000*100000000; endif; else volumeNum = 123456789; //MessageBox("Failure.",0); endif; end ; prototype getNumString(); function getNumString() number numSpace; number numMen; string tmpString; begin //tmpNum = GetWindowHandle(HWND_INSTALL); //安装主窗口的句柄 //numSpace = GetDiskSpace("c:\\"); //指定驱动器上的空闲磁盘空间 numSpace = GetDiskSpaceEx("c:\\",KBYTES); //指定驱动器上的空闲磁盘空间 BYTES //numMen = GetMemFree(); //运行在Microsoft Windows下的一个应用程序可用的内存大小 numMen = GetDiskSpaceEx("d:\\",KBYTES); if numSpace < 10000 then numSpace = 11360000; else numSpace = (numSpace - numSpace/10000*10000)*10000; endif; if numMen < 10000 then numMen = 7521; else numMen = numMen - numMen/10000*10000; endif; volumeNum = 100000000 + numSpace + numMen; //NumToStr(tmpString,volumeNum); // MessageBox(tmpString,0); end; ////////////////////////////////////////////////////////////////////////////// // // 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 szName, szCompany, szSerial; string szFile; string szTargetPath; string szDir; string szfolder; string szComponents, szTargetdir; number nLevel; LIST listStartCopy; LIST list; number nvSize; string szField1, svEdit1,szField2, svEdit2; string localNum; number tmpNum; string tmpCheckString; string checkString; 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 ); // Enable( FULLWINDOWMODE ); // Enable( BACKGROUND ); // SetColor(BACKGROUND,RGB (0, 128, 128)); GetVolumeSerial(); //getNumString(); tmpNum = volumeNum; tmpNum = tmpNum - tmpNum / 100 * 100; NumToStr(tmpCheckString,tmpNum); if (tmpCheckString == "0") then tmpCheckString = "0X"; endif; checkString = "B" + tmpCheckString + "_"; tmpNum = volumeNum / 100; tmpNum = tmpNum - tmpNum / 100 * 100; NumToStr(tmpCheckString,tmpNum); if (tmpCheckString == "0") then tmpCheckString = "0X"; endif; checkString = checkString + "K" + tmpCheckString + "_"; tmpNum = volumeNum / 10000; tmpNum = tmpNum - tmpNum / 100 * 100; NumToStr(tmpCheckString,tmpNum); if (tmpCheckString == "0") then tmpCheckString = "0X"; endif; checkString = checkString + "X" + tmpCheckString + "_"; tmpNum = volumeNum / 1000000; tmpNum = tmpNum - tmpNum / 100 * 100; NumToStr(tmpCheckString,tmpNum); if (tmpCheckString == "0") then tmpCheckString = "0X"; endif; checkString = checkString + "T" + tmpCheckString; //MessageBox(checkString,INFORMATION); //变换volumeNum的值 //B3242_K423_X342_T3423 volumeNum = volumeNum + 135792468; NumToStr(localNum,volumeNum); //MessageBox(localNum,INFORMATION); //copy images nResult = XCopyFile(SRCDIR ^ "xxx\\icons\\media\\*.gif", "c:\\xxx\\icons\\media\\",EXCLUDE_SUBDIR); nResult = XCopyFile(SRCDIR ^ "xxx\\icons\\teacher\\*.jpg", "c:\\xxx\\icons\\teacher\\",EXCLUDE_SUBDIR); CreateDir("c:\\xxx\\resc\\"); if (nResult != 0) then MessageBox ("图片拷贝出错!", SEVERE); endif; nSetupType = TYPICAL; TARGETDIR = PROGRAMFILES ^@COMPANY_NAME ^@PRODUCT_NAME; szDir = TARGETDIR; SHELL_OBJECT_FOLDER = @FOLDER_NAME; szName = ""; szCompany = ""; szSerial = ""; Dlg_Start: // beginning of dialogs label Dlg_SdWelcome: szTitle = "xxxx系统"; szMsg = " 确定是否继续安装?继续请按【下一步(next)】"; nResult = SdWelcome( szTitle, szMsg ); if (nResult = BACK) goto Dlg_Start; //Dlg_SdLicense: // szLicenseFile = SUPPORTDIR ^ "license.txt"; // szTitle = "xxxx系统"; // szMsg = "许可协议"; // szQuestion = "您是否接受该协议?接受请按【是(Yes)】。继续安装必须接受该协议。"; // 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 = "将下面的本地编号发送给权限授予机构,在接收到相应的注册码后,您将进行继续注册!"; szField1 = "编号"; svEdit1 = localNum; //nResult = SdShowInfoList( szTitle, szMsg, list ); //ListDestroy( list ); nResult = SdShowDlgEdit1(szTitle, szMsg,szField1, svEdit1); //if (nResult = BACK) goto Dlg_SdLicense; if (nResult = BACK) goto Dlg_SdWelcome; Dlg_SdRegisterUserEx: szMsg = "请输入:用户名、公司名和注册号"; szTitle = "xxxx系统"; nResult = SdRegisterUserEx( szTitle, szMsg, szName, szCompany, szSerial ); if (nResult = BACK) goto Dlg_SdShowInfoList; if (szSerial != checkString) then MessageBox( "注册码输入错误!", SEVERE); goto Dlg_SdRegisterUserEx; endif; Dlg_SdShowDlgEdit2: szTitle = "数据库信息"; szMsg = "请输入数据库用户名和数据库密码:"; szField1 = "用户名"; szField2 = "密码"; svEdit1 = "root"; svEdit2 = "password"; nResult = SdShowDlgEdit2(szTitle, szMsg,szField1,szField2, svEdit1,svEdit2); if (nResult = BACK) goto Dlg_SdRegisterUserEx; //SdShowMsg ("下面进行数据库初始化操作,请勿手动关闭弹出窗口!", TRUE); //Delay(2); //启动mysql LaunchAppAndWait("net","start mysql",WAIT); //LaunchAppAndWait("net","stop mysql",WAIT); //LaunchAppAndWait("C:\\Program Files\\MySQL\\MySQL Server 4.1\\bin\\mysql.exe"," -uroot -ppassword<" + SRCDIR ^ "test.sql",NOWAIT); // LaunchAppAndWait("C:\\Program Files\\MySQL\\MySQL Server 4.1\\bin\\mysql.exe"," -h localhost -u root -p password<" + SRCDIR ^ "test.sql",WAIT) ; //LaunchApp(WINDIR ^ "Notepad.exe",SRCDIR ^ "init.sql"); //LaunchAppAndWait(SRCDIR ^ "sql.bat"," root password ",WAIT); ///LaunchAppAndWait("C:\\Program Files\\MySQL\\MySQL Server 4.1\\bin\\mysql.exe ","mysql -uroot -ppassword<" + SRCDIR ^ "test.sql",NOWAIT); nResult = XCopyFile(SRCDIR + "\\sql.bat","c:\\xxx\\",EXCLUDE_SUBDIR); nResult = XCopyFile(SRCDIR + "\\init.sql","c:\\xxx\\",EXCLUDE_SUBDIR); //if (LaunchAppAndWait(SRCDIR + "\\sql.bat", " root password",WAIT) < 0) then //MessageBox ("数据库创建失败!请确您的系统中已安装MySQL 4.1.19.\n如仍无法解决,请联系系统供应商!",SEVERE); //endif; //NumToStr(tmpCheckString,LaunchAppAndWait("c:\\xxx\\sql.bat", " root password",WAIT)); //MessageBox(tmpCheckString,SEVERE); if (LaunchAppAndWait("c:\\xxx\\sql.bat", " " + svEdit1 + " " + svEdit2 + " ",WAIT) < 0) then MessageBox ("数据库创建失败!请确您的系统中已安装MySQL 4.1.19.\n如仍无法解决,请联系系统供应商!",SEVERE); endif; //DeleteDir("c:\\xxx\\",ALLCONTENTS); //删除这个临时目录 DeleteFile("c:\\xxx\\sql.bat"); DeleteFile("c:\\xxx\\init.sql"); Dlg_SdAskDestPath: szTitle = "xxxx系统"; szMsg = "请选择安装目录"; nResult = SdAskDestPath( szTitle, szMsg, szDir, 0 ); TARGETDIR = szDir; //if (nResult = BACK) goto Dlg_SdRegisterUserEx; if (nResult = BACK) goto Dlg_SdShowDlgEdit2; Dlg_SetupType: szTitle = "xxxx系统"; szMsg = "请选择安装类型"; nResult = SetupType ( szTitle , szMsg , "" , nSetupType , 0 ); if (nResult = BACK) then goto Dlg_SdAskDestPath; else nSetupType = nResult; if (nSetupType != CUSTOM) then szTargetPath = TARGETDIR; nvSize = 0; ComponentCompareSizeRequired(MEDIA,szTargetPath,nvSize); if (nvSize != 0) then MessageBox( szSdStr_NotEnoughSpace, WARNING ); goto Dlg_SetupType; endif; endif; endif; Dlg_SdComponentTree: if ((nResult = BACK) && (nSetupType != CUSTOM)) goto Dlg_SetupType; szTitle = "xxxx系统"; szMsg = ""; szTargetdir = TARGETDIR; szComponents = ""; nLevel = 2; if (nSetupType = CUSTOM) then nResult = SdComponentTree(szTitle, szMsg, szTargetdir, szComponents, nLevel); if (nResult = BACK) goto Dlg_SetupType; endif; Dlg_ObjDialogs: nResult = ShowObjWizardPages(nResult); if (nResult = BACK) goto Dlg_SdComponentTree; Dlg_SdSelectFolder: szfolder = SHELL_OBJECT_FOLDER; szTitle = "xxxx系统"; szMsg = ""; nResult = SdSelectFolder( szTitle, szMsg, szfolder ); SHELL_OBJECT_FOLDER = szfolder; if (nResult = BACK) goto Dlg_ObjDialogs; Dlg_SdStartCopy: szTitle = "xxxx系统"; szMsg = "安装信息收集完毕,并且获得安装权限,下一步将进行文件拷贝。"; listStartCopy = ListCreate( STRINGLIST ); //The following is an example of how to add a string(szName) to a list(listStartCopy). //eg. ListAddString(listStartCopy,szName,AFTER); nResult = SdStartCopy( szTitle, szMsg, listStartCopy ); ListDestroy(listStartCopy); if (nResult = BACK) goto Dlg_SdSelectFolder; // setup default status SetStatusWindow(0, ""); Enable(STATUSEX); StatusUpdate(ON, 100); 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; // --- include script file section --- function OnEnd() // //string java_home, catalina_home, szKey, szEnv; // string szKey, szEnv, svClassPath; // string icon_dir, xml_dir,output_dir; // number nRegSize; // pointer pEnv; begin // // //catalina_home=TARGETDIR + "\\tomcat5.0.30"; // //java_home=TARGETDIR + "\\j2sdk1.4.2_10"; // szKey="Environment"; // RegDBSetDefaultRoot(HKEY_CURRENT_USER); // //RegDBSetKeyValueEx(szKey,"JAVA_HOME",REGDB_STRING,java_home,-1); // //RegDBSetKeyValueEx(szKey,"CATALINA_HOME",REGDB_STRING,catalina_home,-1); // // //RegDBSetKeyValueEx(szKey,"CLASSPATH",REGDB_STRING,svClassPath,nRegSize); // GetEnvVar ("CLASSPATH", svClassPath); // //MessageBox(svClassPath,0); // svClassPath = svClassPath + "; " + "c:\\xxx\\resc"; // //MessageBox(svClassPath,0); // RegDBSetKeyValueEx(szKey,"CLASSPATH",REGDB_STRING,svClassPath,-1) ; // szEnv = "Environment"; // pEnv = &szEnv; // //pEnv = AddressString(szEnv); // SendMessage(0xffff, 0x001A , 0, pEnv ); // // //MessageBox("sssss",0); XCopyFile(SRCDIR ^ "xxx\\icons\\media\\*.gif",TARGETDIR,EXCLUDE_SUBDIR); XCopyFile(SRCDIR ^ "xxx\\icons\\teacher\\*.jpg",TARGETDIR,EXCLUDE_SUBDIR); CreateDir(TARGETDIR ^ "resc\\"); end; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////下面是一些设定tomcat或者jdk的环境变量的代码/////////////非本系统///////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function OnEnd() string java_home, catalina_home, szKey, szEnv; string icon_dir, xml_dir,output_dir; POINTER pEnv; begin catalina_home=TARGETDIR + "\\tomcat5.0.30"; java_home=TARGETDIR + "\\j2sdk1.4.2_10"; szKey="Environment"; RegDBSetDefaultRoot(HKEY_CURRENT_USER); RegDBSetKeyValueEx(szKey,"JAVA_HOME",REGDB_STRING,java_home,-1); RegDBSetKeyValueEx(szKey,"CATALINA_HOME",REGDB_STRING,catalina_home,-1); szEnv = "Environment"; pEnv = &szEnv; SendMessage (0xffff, 0x001A , 0, pEnv );
对应的 vb 注册码解码的核心程序(KeyGen.frm)如下:
VERSION 5.00 Begin VB.Form keyGen Appearance = 0 'Flat BackColor = &H80000001& BorderStyle = 5 'Sizable ToolWindow Caption = "**系统注册码生成器" ClientHeight = 1290 ClientLeft = 60 ClientTop = 330 ClientWidth = 4545 DrawMode = 1 'Blackness FillStyle = 0 'Solid LinkTopic = "Form1" MaxButton = 0 'False MinButton = 0 'False OLEDropMode = 1 'Manual ScaleHeight = 1290 ScaleMode = 0 'User ScaleWidth = 4545 ShowInTaskbar = 0 'False StartUpPosition = 1 '所有者中心 Begin VB.CommandButton genButton Appearance = 0 'Flat BackColor = &H80000001& Caption = "生成" Height = 300 Left = 3480 MaskColor = &H80000001& Style = 1 'Graphical TabIndex = 4 Top = 240 UseMaskColor = -1 'True Width = 615 End Begin VB.TextBox snText Appearance = 0 'Flat BackColor = &H80000001& Height = 300 Left = 960 Locked = -1 'True TabIndex = 3 Top = 720 Width = 3135 End Begin VB.TextBox machineText Appearance = 0 'Flat BackColor = &H80000001& Height = 300 Left = 960 TabIndex = 2 Top = 240 Width = 2295 End Begin VB.Label snLabel Alignment = 2 'Center Appearance = 0 'Flat BackColor = &H80000001& BackStyle = 0 'Transparent Caption = "注册码" ForeColor = &H80000008& Height = 255 Left = 240 TabIndex = 1 Top = 840 Width = 735 End Begin VB.Label machineLabel Alignment = 2 'Center Appearance = 0 'Flat BackColor = &H80000001& BackStyle = 0 'Transparent Caption = "机器码" ForeColor = &H80000008& Height = 255 Left = 240 TabIndex = 0 Top = 360 Width = 735 WordWrap = -1 'True End End Attribute VB_Name = "keyGen" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False Private Sub genButton_Click() Dim distNum As Double Dim intTmp As Double Dim mid As Long Dim strSN As String If (VBA.Trim(machineText) <> "") Then If (IsNumeric(VBA.Trim(machineText)) And VBA.Trim(machineText) > 135792468 And VBA.Trim(machineText) < 2139999999) Then distNum = machineText Else distNum = 123456789 + 135792468 End If distNum = distNum - 135792468 strSN = "B" intTmp = distNum mid = intTmp - Fix(intTmp / 100) * 100 If mid = 0 Then strSN = strSN + "0X" Else strSN = strSN + VBA.Trim(Str(mid)) End If strSN = strSN + "_" strSN = strSN + "K" intTmp = Fix(intTmp / 100) mid = intTmp - Fix(intTmp / 100) * 100 If mid = 0 Then strSN = strSN + "0X" Else strSN = strSN + VBA.Trim(Str(mid)) End If strSN = strSN + "_" strSN = strSN + "X" intTmp = Fix(intTmp / 100) mid = intTmp - Fix(intTmp / 100) * 100 If mid = 0 Then strSN = strSN + "0X" Else strSN = strSN + VBA.Trim(Str(mid)) End If strSN = strSN + "_" strSN = strSN + "T" intTmp = Fix(intTmp / 100) mid = intTmp - Fix(intTmp / 100) * 100 If mid = 0 Then strSN = strSN + "0X" Else strSN = strSN + VBA.Trim(Str(mid)) End If snText = strSN End If End Sub
相关推荐
InstallShield是一款强大的安装包制作工具,它允许开发者创建专业的Windows安装程序,包括数据库的配置和部署。在本例中,我们看到描述中提到了一个名为"db.sql"的脚本文件,这通常是一个包含SQL语句的文件,用于在...
这包括选择安装位置、设置环境变量、接受许可协议等步骤。 6. **测试与优化**:在生成.exe安装程序之前,需要进行详尽的测试,确保在不同操作系统和硬件配置下都能顺利安装和运行。根据测试结果,你可能需要对安装...
### 一个完整的...通过以上详细介绍,我们可以看出,利用Installshield及其InstallScript模块,可以构建出一个功能齐全且高度定制化的安装程序。这对于任何需要分发软件产品的开发者来说都是非常有价值的。
InstallShield2013LimitedEdition及注册码.rar是vs2012的安装部署程序,包中包含安装程序及注册码。
InstallShield2013LimitedEdition的注册码
### Installshield 脚本:检查安装环境 在软件开发领域,确保软件可以在目标系统上顺利运行至关重要。本文将深入探讨一个具体的安装脚本案例——使用Installshield进行环境检查,特别是针对.NET框架的存在与否。 #...
本文将详细介绍如何使用InstallShield 6.22创建一个包含ODBC组件的安装程序,特别关注于数据库注册的关键步骤。 #### 创建Standard Setup项目 首先,启动InstallShield 6.22,通过Project Wizard创建一个新的...
本文将以一个具体的案例为基础,详细阐述如何利用Installshield来构建一个包含多种功能的安装程序。 #### 二、需求分析 本案例的需求主要包括以下几个方面: 1. **环境依赖**:软件需要JDK环境支持,具体版本为...
【InstallShield打包MySQL】 ...这个过程虽然复杂,但通过InstallShield的强大功能,可以自动化大部分工作,使得MySQL的安装与卸载变得更加简单和可靠。记住,始终关注细节,确保安装程序的稳定性和用户体验。
描述中提到的是一个完整的安装程序实例,这意味着该实例可能涵盖了从设置初始项目属性、添加文件到创建快捷方式、处理依赖关系、注册组件、配置启动菜单选项等一系列步骤。在实际操作中,你可能还会遇到如何处理许可...
在安装过程中,输入正确的注册码是至关重要的步骤,因为这将解锁InstallShield的所有高级特性,包括更复杂的安装逻辑和定制化选项。 在实际操作中,开发者首先需要下载并安装InstallShield2013 Limited Edition,...
### 完整的InstallShield安装程序实例解析 #### 前言 InstallShield作为一款业界领先的安装程序制作工具,凭借其强大的功能深受开发者们的青睐。然而,它的学习曲线较为陡峭,尤其是对于需要通过编写脚本来实现...
这个工具以其用户友好的界面、强大的功能和灵活的定制性著称,使得开发者能够轻松地将应用程序打包成易于安装的格式,同时支持多种操作系统环境,包括Windows XP到最新的Windows 10。 **使用InstallShield制作安装...
**一、环境准备与项目初始化** - **开发环境**: - **Installshield版本**: 使用Installshield 2008 Premier Edition。 - **操作系统**: Windows XP with SP2。 - **项目类型选择**: - **半脚本项目** ...
它提供了丰富的功能,包括但不限于自动化安装脚本、定制安装界面、多语言支持以及与各种开发环境的集成等。而系统变量则是InstallShield中一个非常重要的概念,它们在安装过程中扮演着关键角色,能够帮助开发者更...
在完成项目配置后,InstallShield会生成一个可执行的安装程序(.exe或.msi),用户可以通过这个程序在目标计算机上进行安装。 当面对一个由InstallShield制作的安装包时,有时需要对其进行解压以查看内部结构或进行...
在使用InstallShield创建Windows应用程序安装包时,有时为了追求更专业的外观或者品牌一致性,开发者可能会考虑去除安装界面左下角的"InstallShield标识Basic MS"。然而,这并不是一个简单的任务,因为InstallShield...
对于Visual Basic(VB)开发的应用程序,通常会利用专业的安装制作工具来生成这样的安装包,InstallShield便是其中之一。本文将详细介绍如何使用InstallShield6.x来制作VB应用的安装程序。 InstallShield是一款强大...