想在安装的时候把在ODBC32中添加一个新的数据源,如何实现?谢谢!
解决方案 »
- CTreeCtrl 如何禁止编辑节点?
- mfc有个导航的程序,怎么加大头针啊
- 求CLhpHtmlView演示程序源代码
- 文档对象模型问题
- 下拉框加了隐藏样式后换行了
- 帮忙解决一下ComboBox的改变如何改变对话框上的内容显示
- 如何使得对话框,在屏幕的特定坐标位置弹出?
- ★★★求救:我在DLL里面做了一个属性页,用导出得接口函数显示,为什么界面出不来,而不封装在Dll里面就能够显示★★★
- installshield问题:在installshield中如何用程序得到某一软件所在的物理位置?
- 利用VS2005如何对同一个数据阵进行相关系数矩阵和协方差矩阵分析
- 为什么在对话框里的按钮加上OWner draw属性就可以,而在基于CFormView 类建的SDI工程中的按钮一加上此属性程序运行就报错?
- 怎么才能保证退出一个函数时,所有在该函数中局部变量 申请的空间都被释放了?
#define UNINST_LOGFILE_NAME "Uninst.isu"
// installation declarations
//程序代码一
//定义用户注册信息的各级分支,这些参数由函数InstallationInfo调用
#define COMPANY_NAME "ODBC"
#define PRODUCT_NAME "ODBC.INI"
#define PRODUCT_VERSION "pb70"
#define PRODUCT_VERSION_NEW "pb7_pipe"
#define PRODUCT_KEY "dbeng6.exe"
#define DEINSTALL_KEY "pb670_DeinstKey"
#define UNINSTALL_NAME "pb70_uninstname"
#define DEFAULT_LOG_PATH "pb70"
//程序代码二所在的位置
// global variables
// generated
BOOL bWinNT,bIsShellExplorer,bInstall,Aborted, bIs32BitSetup;
STRING svDir;
STRING svName,svCompany, svSerial;
STRING svDefGroup;
STRING szAppPath;
STRING svSetupType;
// your global variables
//程序代码二//定义用户应用所连数据源的各项信息参数
// szStrName1,szStrValue1分别代表注册表中的键值
//名和键值,其他类似
STRING szStrName1, szStrValue1,svLogFile;
STRING szStrName2, szStrValue2;
STRING szStrName3, szStrValue3;
STRING szStrName4, szStrValue4;
STRING szStrName5, szStrValue5;
STRING szStrName6, szStrValue6;
STRING szStrName7, szStrValue7;
STRING szStrName8, szStrValue8;
NUMBER nvSize, nvType;
//程序代码三所在的位置
//Function: SetupRegistry
//Purpose:This functition makes the registry entries for this setup.
function SetupRegistry()
begin//程序代码三//给前面定义的参数赋值,这些值是数据源中的要注册的内容
szStrName1 = "Agent";
szStrValue1 = "engine";
szStrName2 = "AutoStop";
szStrValue2 = "Yes";
szStrName3 = "DatabaseFile";
szStrValue3 = TARGETDIR ^'program'^'pb70.db';
szStrName4 = "DatabaseName";
szStrValue4 = "pb70";
szStrName5 = "Driver";
szStrValue5 = TARGETDIR ^'Program'^'dbodbc6.dll';
szStrName6 = "PWD";
szStrValue6 = "sql";
szStrName7 = "Start";
szStrValue7 = TARGETDIR ^'Program'^'dbeng6.exe -c 8m';
szStrName8 = "UID";
szStrValue8 = "dba";
//设置缺省的注册表入口
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
//生成用户应用注册信息的各级分支
InstallationInfo(COMPANY_NAME,PRODUCT_NAME,
PRODUCT_VERSION, PRODUCT_KEY);
DeinstallStart(DEFAULT_LOG_PATH,svLogFile,&
DEINSTALL_KEY, 0);
//向用户所创建的注册分支中,添加数据源的键值名和键值
RegDBSetAppInfo(szStrName1,REGDB_STRING,szStrValue1, -1);
RegDBSetAppInfo(szStrName2, REGDB_STRING,szStrValue2, -1);
RegDBSetAppInfo(szStrName3, REGDB_STRING,szStrValue3, -1);
RegDBSetAppInfo(szStrName4, REGDB_STRING,szStrValue4, -1);
RegDBSetAppInfo(szStrName5, REGDB_STRING,szStrValue5, -1);
RegDBSetAppInfo(szStrName6, REGDB_STRING,szStrValue6, -1);
RegDBSetAppInfo(szStrName7, REGDB_STRING,szStrValue7, -1);
RegDBSetAppInfo(szStrName8, REGDB_STRING,szStrValue8, -1);
return 0;
end;用同样的方法可实现数据源pb7_pipe的注册。为说明以上程序的作用,下面给出安装盘安装后注册表所发生的结果。如下图所示: 建立磁盘映像
在完成以上四步后,应先编译;在编译通过后,利用向导可方便的建立磁盘映像。
编译的步骤如下:
单击工具条中的 图标,系统将对当前工程对象进行编译。
编译完成后,在状态显示窗口中显示编译的结果。如下图所示:
只有编译成功后,才可建立磁盘映像。若发生错误,应先排除错误后才可建立磁盘映像。
2. 通过注册表配置ODBC 除了前面ODBC-DAO-RDO的安装模板可以进行ODBC数据源的设置外,直接操作注册表也能达到同样效果。 例如下面的过程是利用MFC Template制作VC6.0数据库应用程序的安装项目(条件同前): (1) 启动InstallShield 5.5;
(2) 单击"New"工具按钮或选择"File"->"New"菜单命令,弹出相应的对话框,切换到"Template"页面,选定"MFC Template",单击[确定]按钮后,IntallShield就会自动为用户创建一个名为"MFC Template"的安装项目;
(3) 切换到"File Groups" 页面,展开"Program Files"项,选定"Static File Links",删除右边窗口中的所有文件,并右击鼠标,从弹出的快捷菜单中选择"Insert Files"命令,将数据库文件"student.mdb"和VC6.0应用程序(Release版)"Ex_ODBC.exe"调入;
(4) 切换到"Resource"页面,展开"Explorer Shell"的所有子项,选定"App",将其"Target"属性改为"\Ex_ODBC.exe"。
(5) 切换到"Scripts"页面,打开"setup.rul"脚本文件,在
prototype CheckRequirements ();
语句的下一行添加下列语句:
prototype SetupRegistry();
(6) 在脚本文件的后面添加该自定义函数代码: function SetupRegistry()
NUMBER nResult;
STRING szPath, szKeyName;
begin
RegDBSetDefaultRoot ( HKEY_CURRENT_USER );
szKeyName = "Software\\ODBC\\ODBC.INI\\我的数据库";
if(RegDBKeyExist(szKeyName)<0) then
RegDBCreateKeyEx (szKeyName,"");
else
RegDBDeleteKey (szKeyName);
RegDBCreateKeyEx (szKeyName,"");
endif;
szKeyName = "Software\\ODBC\\ODBC.INI\\ODBC Data Sources";
if(RegDBKeyExist(szKeyName)<0) then
RegDBCreateKeyEx (szKeyName,"");
endif;
RegDBSetKeyValueEx ( szKeyName, "我的数据库" , REGDB_STRING ,"Microsoft Access Driver (*.mdb)" , -1);
szPath = TARGETDIR^"student.mdb";
szKeyName = "Software\\ODBC\\ODBC.INI\\我的数据库";
RegDBSetKeyValueEx ( szKeyName, "DBQ" , REGDB_STRING , szPath , -1);
RegDBSetKeyValueEx ( szKeyName, "Description" , REGDB_STRING , "用于VC++的数据源" , -1);
RegDBSetKeyValueEx ( szKeyName, "Driver" , REGDB_STRING , WINSYSDIR+"\odbcjt32.DLL" , -1);
RegDBSetKeyValueEx ( szKeyName, "DriverID" , REGDB_NUMBER , "25" , -1);
RegDBSetKeyValueEx ( szKeyName, "SafeTransactions" , REGDB_NUMBER ,"0" , -1);
RegDBSetKeyValueEx ( szKeyName, "UID" , REGDB_STRING ,"" , -1);
RegDBCreateKeyEx ("Software\\ODBC\\ODBC.INI\\我的数据库\\Engines","");
RegDBCreateKeyEx ("Software\\ODBC\\ODBC.INI\\我的数据库\\Engines\\Jet","");
szKeyName = "Software\\ODBC\\ODBC.INI\\我的数据库\\Engines\\Jet";
RegDBSetKeyValueEx ( szKeyName, "Driver" , REGDB_STRING , WINSYSDIR+"\odbcjt32.DLL" , -1);
RegDBSetKeyValueEx ( szKeyName, "ImplicitCommitSync" , REGDB_STRING , "" , -1);
RegDBSetKeyValueEx ( szKeyName, "Threads" , REGDB_NUMBER , "3" , -1);
RegDBSetKeyValueEx ( szKeyName, "UserCommitSync" , REGDB_STRING , "Yes" , -1);
end; (7)将项目工作区窗口切换到Media页面,单击Media Build Wizard项,创建新的媒介。
(8)编译并运行InstallShield for VC版在VC的安装盘上就有