54cndr
驱动牛犊
驱动牛犊
  • 注册日期2003-06-03
  • 最后登录2010-12-21
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望20点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:14011回复:23

用InstallShield开发驱动安装程序的方法

楼主#
更多 发布于:2004-03-26 12:48
这是一个MP3 Player在win98下的驱动程序安装包的例子,开发工具是InstallShield6.2。
其功能是实现Driver的自动安装,原始文件是StMp3Rec.inf,StUms.inf,StMp3Rec.sys,
StUms.sys,StUmsPdr.pdr。供大家参考,以便快速掌握InstallShield开发98驱动安装程序的方法。 

            创建驱动程序包的步骤
一、用向导生成一个工程。

二、创建Files Groups
   1、Inf Files
      包含文件:StMp3Rec.inf, StUms.inf,    安装目录:<WINDIR>\inf

   2、Sys Files
      包含文件:StMp3Rec.sys, StUms.sys,    安装目录:<WINDIR>\System32\Drivers

   3、Pdr Files
      包含文件:StUms.pdr,    安装目录:<WINSYSDIR>\iosubsys

   4、App Files
      包含文件:无  

三、创建Componets
   1. Inf Files 2、Sys Files 3、Pdr Files 4、App Files 并指定它们和Files Groups的组件一一对应。
  
四、创建卸载菜单
  新建Uninstall快捷方式,Target: <DISK1TARGET>\setup.exe        
                           Install Conditions:  App Files
五、写InstallScrip代码


////////////////////////////////////////////////////////////////////////////////
//                                                                            
//  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.
//
////////////////////////////////////////////////////////////////////////////////


// 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

//////////////////////////////////////////////////////////////////////////////
//
//  FUNCTION:   OnBegin
//
//  EVENT:      Begin event is always sent as the first event during installation.
//
//////////////////////////////////////////////////////////////////////////////
function OnBegin()
begin
    if (!(SYSINFO.WIN9X.bWin98)) then  
        MessageBox("The installation only for Windows 98.",INFORMATION);
        abort;
    endif;  
    //delete device infomation
    RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
    RegDBDeleteKey("Enum\\USB\\VID_066F&PID_8000");
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;
    LIST    listStartCopy;
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));  
  
    TARGETDIR = PROGRAMFILES ^@COMPANY_NAME ^@PRODUCT_NAME;

Dlg_Start:
    // beginning of dialogs label

Dlg_SdWelcome:
    szTitle = "";
    szMsg   = "";
    nResult = SdWelcome( szTitle, szMsg );
    if (nResult = BACK) goto Dlg_Start;

    // setup default status
    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;
    NUMBER nReserved;
begin
    Disable(STATUSEX);

    ShowObjWizardPages(NEXT);

    szMsg1 = SdLoadString(IFX_SDFINISH_MSG1);    
    nReserved = 0;  
    SdFinishReboot(szTitle, szMsg1, SYS_BOOTMACHINE,szMsg2,nReserved);
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:   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);
    ShowObjWizardPages(NEXT);    
    
    //Delete device information
    RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
    RegDBDeleteKey("Enum\\USB\\VID_066F&PID_8000");

bOpt1   = FALSE;
    bOpt2   = FALSE;
    szMsg1  = SdLoadString(IFX_SDFINISH_MAINT_MSG1);
szTitle = SdLoadString(IFX_SDFINISH_MAINT_TITLE);
    SdFinishEx(szTitle, szMsg1, szMsg2, szOption1, szOption2, bOpt1, bOpt2);
end;
// --- include script file section ---

最新喜欢:

neworcomneworc... riririririri
rain_pot
驱动牛犊
驱动牛犊
  • 注册日期2003-12-20
  • 最后登录2004-12-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-06-06 16:11
我正想要这方面的资料,谢谢!
沙漠玫瑰
xuquanyong
驱动牛犊
驱动牛犊
  • 注册日期2004-07-14
  • 最后登录2004-07-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-07-14 12:52
请问用这种方法可以实现驱动的自动安装吗?

我的驱动只有一个.inf 和一个.sys文件。试了一下,为什么不能实现驱动的自动安装呢?

可以在控制面板的添加/删除程序中看到这个驱动项目。

但在设备管理器中为什么看不到这个驱动程序呢?
54cndr
驱动牛犊
驱动牛犊
  • 注册日期2003-06-03
  • 最后登录2010-12-21
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望20点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-07-15 21:18
可以实现,你注意一下inf,sys文件安装的目录,再试试看.
inf:   <WINDIR> 下inf
sys:   <WINDIR> 下System32  下Drivers
KungFu
驱动大牛
驱动大牛
  • 注册日期2001-09-27
  • 最后登录2008-04-08
  • 粉丝0
  • 关注0
  • 积分221分
  • 威望24点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-07-16 15:55
我也正在研究
多谢了
有问题来找你请教 :)
我不写驱动好多年
54cndr
驱动牛犊
驱动牛犊
  • 注册日期2003-06-03
  • 最后登录2010-12-21
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望20点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-07-20 08:25
To  xuquanyong:
    如果你是Win2000,WinXP那么还要增加以下处理,内容是以前的一张贴子,在此引用。

首先说一下我的资源何我的目标:
我有两个文件,scap.sys和scap.inf,我的环境是InstallShield Developer 8 ,我希望最终可以制作出一个安装包,执行后可以自己实现驱动的安装。安装的平台为Windows 2000 或windows XP

下面是我找到的资料列出来:
1)这是InstallShield的官方网站上的一遍文档:

HOWTO: Launching an .inf File Via InstallScript 文档ID: Q102851

如何通过安装脚本来实现.inf的安装

为可以实现安装.inf文件,可以在安装脚本中通过调用LaunchAppAndWait函数启动一个命令行方式实现:

Windows 9x
Rundll.exe setupx.dll,InstallHinfSection DefaultInstall 132 %1

Windows NT/2000
Rundll32.exe setupapi.dll,InstallHinfSection DefaultInstall 132 %1

where %1 is the .inf filename.

下面给出例子:
Windows 9x

szProgram = "rundll.exe";
szCmdLine = "setupx.dll,InstallHinfSection DefaultInstall 132 " + SUPPORTDIR + "test.inf";
LaunchAppAndWait(szProgram, szCmdLine, WAIT);


Windows NT / 2000

szProgram = "rundll32.exe";
szCmdLine = "setupapi.dll,InstallHinfSection DefaultInstall 132 + SUPPORTDIR + "test.inf";
LaunchAppAndWait(szProgram, szCmdLine, WAIT);

文档内容我只保留需要的,如果需要详细的资料请根据文档ID到InstallShield上阅读。

2)还是一个例子,是InstallShield里一个老外问的
Q:How can i call an INF file during installation through installshield.
I need to do this inorder to install some PDF printers.

A:
Windows 9x
szProgram = "rundll.exe";
szCmdLine = "setupx.dll,InstallHinfSection DefaultInstall 132 " + SUPPORTDIR + "test.inf";
LaunchAppAndWait(szProgram, szCmdLine, WAIT);

Windows NT / 2000
szProgram = "rundll32.exe";
szCmdLine = "setupapi.dll,InstallHinfSection DefaultInstall 132 " + SUPPORTDIR + "test.inf";
LaunchAppAndWait(szProgram, szCmdLine, WAIT);

SUPPORTDIR is were your inf will be located.


3)网上的大虾都说在安装程序之外写一个执行安装功能的小程序,可以在DDKsrcsetup……找得到,我去看了,同时我也在MSDN上找到了一个文章,就是介绍这个小程序的的
http://support.microsoft.com/default.aspx?scid=http://support.microsoft..com:80/support/kb/articles/q311/2/72.asp&NoWebContent=1
有兴趣自己去看看,我就不罗嗦啦,我把这个程序Devcon下载了下来。


现在我手上有的资料可以使我有两种安装方式,一个是通过InstallShield在安装过程中通过脚本来调用Devcon来实现安装;还有一个是通过在脚本中调用rundll32来实现安装。

顺遍提一下,关于INF文件安装需要调用的函数说明,具体说明请参看Microsoft的MSDN
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/setupapi/setup/installing_from_an_inf_file.asp
KungFu
驱动大牛
驱动大牛
  • 注册日期2001-09-27
  • 最后登录2008-04-08
  • 粉丝0
  • 关注0
  • 积分221分
  • 威望24点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-07-20 14:47
好像不OK;

szProgram = "rundll32.exe";
szCmdLine = "setupapi.dll,InstallHinfSection DefaultInstall 132 + SUPPORTDIR + "test.inf";
LaunchAppAndWait(szProgram, szCmdLine, WAIT);
只用这几句代码就可以了吗???

用rundll32调用的时候没有任何错误提示,就是看不到设备,还要做其他的吗?

[编辑 -  7/21/04 by  KungFu]
我不写驱动好多年
54cndr
驱动牛犊
驱动牛犊
  • 注册日期2003-06-03
  • 最后登录2010-12-21
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望20点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-07-28 09:42
To KungFu:
1.SUPPORTDIR是指inf及sys等所有Driver文件所在的路径.你要先把所有Driver文件copy到硬盘,例如你的文件在C:\\YourDriver,则SUPPORTDIR在程序中要替换为 "C:\\\\YourDriver\\\\".

2.如果你的设备是USB设备,则在安装Driver后,要把设备连接到电脑后才会在设备管理器看到设备名称.

[编辑 -  7/28/04 by  54cndr]

[编辑 -  7/28/04 by  54cndr]
beckzp
驱动牛犊
驱动牛犊
  • 注册日期2004-07-02
  • 最后登录2016-01-09
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-08-02 10:54
   我用这个方法加载我的passthru.sys,为什么敲入以后,系统没有报错,但实际上并没有加载上?有人还有我这种情况吗
dcj2004
驱动牛犊
驱动牛犊
  • 注册日期2004-08-06
  • 最后登录2004-08-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-08-06 19:03
你好,各位高手您们好。
我对InstallShield一点都不懂。
但是我现在急需搞会“制作驱动自动安装程序”。
我在一家工厂工作。工厂做很多PCI卡。但是从网上下载的驱动大多都是必须得手动安装驱动。如今老板下达指令得我在一个月内把所有的PCI卡驱动(包括Sound Card,Modem Card, Network Adapter, RS232 PCMCIA Cardbus, LAN Cardbus and so on).苦于自己对这个一点都不懂。眼看着时间一天一天过去。请各位大虾指点迷津。小的一定铭记。下辈子一定做牛做马侍候您们!!!

请给我一些介意吧。请发至我的邮箱:dengchaojun2003@sohu.com
 
wormworm
驱动牛犊
驱动牛犊
  • 注册日期2004-06-20
  • 最后登录2013-06-03
  • 粉丝0
  • 关注0
  • 积分45分
  • 威望45点
  • 贡献值1点
  • 好评度3点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-08-10 09:14
谢谢两位高手。
networm
sunzb
驱动牛犊
驱动牛犊
  • 注册日期2004-04-24
  • 最后登录2004-08-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-08-11 12:58
我以前做过PCI电视卡,USB电视盒,还有串口特殊运用的驱动安装程序。有原码。
54cndr
驱动牛犊
驱动牛犊
  • 注册日期2003-06-03
  • 最后登录2010-12-21
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望20点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-08-13 08:31
To:  dcj2004

    你可以在google里搜索"InstallShield简明使用教程",就可以找一本电子书,它是InstallShield入门的好书.
wound
驱动牛犊
驱动牛犊
  • 注册日期2004-06-08
  • 最后登录2004-09-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-08-14 15:29
TO sunzb
我现在也在做PCMCIA串口的安装,可以将你原来做的例子给我参考下吗,谢谢了!

mail:wound1979@163.com/ding_jie@mtift.com
dcj2004
驱动牛犊
驱动牛犊
  • 注册日期2004-08-06
  • 最后登录2004-08-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-08-17 16:02
To sunzb:
你能把网卡的安装工程样本给我参考一下吗?
Sundsea
驱动老牛
驱动老牛
  • 注册日期2003-05-06
  • 最后登录2012-06-05
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望35点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2004-08-17 19:09
To:  dcj2004

    你可以在google里搜索"InstallShield简明使用教程",就可以找一本电子书,它是InstallShield入门的好书.
renwood
驱动牛犊
驱动牛犊
  • 注册日期2004-08-23
  • 最后登录2004-08-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2004-08-23 11:08
谁能把完整的安装脚本贴出来啊?
我的一执行就报安装失败,用的是:
    szProgram = "rundll32.exe";
    driverDir = "D:\\CDMASource\\driver";
    szCmdLine = "setupapi.dll,InstallHinfSection    DefaultInstall 132" + driverDir + "modem.inf";
    LaunchAppAndWait(szProgram, szCmdLine, WAIT);
还有supportdir在哪设哦?请高手指点.
zsh_7769
驱动小牛
驱动小牛
  • 注册日期2004-04-15
  • 最后登录2005-12-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2004-10-09 10:24
to sunzb:
你能把以前做过PCI电视卡,USB电视盒,还有串口特殊运用的驱动安装程序发给我学习一下吗?谢谢!
zsh_7769@163.com
playar
驱动牛犊
驱动牛犊
  • 注册日期2004-03-04
  • 最后登录2009-04-19
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2004-10-14 11:59
说了这么多,我直接问一句吧:)

是不是对有inf文件的驱动程序,将文件拷入相应目录后
只需要运行rundll32就可以安装?

多些啦!
limh909
驱动牛犊
驱动牛犊
  • 注册日期2004-08-26
  • 最后登录2005-01-24
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2004-10-25 14:43
我要好好研究一下。谢谢了!
上一页
游客

返回顶部