微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Install Shield Script小结调用api,com,bat

Install Shield Script小结(调用api,com,bat)


老大让我在先前打包程序基础上,把现在项目打包了(web项目)。基本要求是这样子的,用项目包括所需的控件,建虚拟目录。在用户可对sqlSERVER 对行配置,也可安装包内sqlEXPRESS(如果用户配置后无法连接且判断机器内未安装sqlSERVER即安装包内sqlEXPRESS),捣鼓了一星期,把学到的共享下。语法主要看下那个教程就可以,函数直接F1

基本资料:
InstallshieldX安装制作杂记.rar
installshieldjc.rar

再就是InstallShield和帮助,推荐它的官方论坛http://community.installshield.com/

1.用InstallShield Script调用WINAPI方法
如取得机器的登陆用户名。MSDN

GetUserName

The GetUserName function retrieves the name of the user associated with the current thread.

Use the GetUserNameEx function to retrieve the user name in a specified format. Additional @R_446_4045@ion is provided by the interface.

BOOL GetUserName(
LPTSTR lpBuffer,
LPDWORD nSize
);
.......
DLL Requires Advapi32.dll.
Unicode

Implemented as GetUserNameW (Unicode) and GetUserNameA (ANSI). Note that Unicode support on Windows Me/98/95 requires Microsoft Layer for Unicode.

.......
参照 installshieldjc.rar里的对应于Winapi里的函数类型声明,于api函数签名对应,如下声明使用:
prototype BOOL Advapi32.GetUserNameA(BYREF STRING, BYREF NUMBER );
function  OnBegin()
STRING strlogonUser;
NUMBER numlogonUser
begin
//

.

numlogonUser  =   255 ;  
GetUserNameA(strlogonUser, numlogonUser);
MessageBox(strlogonUser,@R_446_4045@ION);
end;

2.用InstallShield Script调用其他Com
例1:使用DOM
 prototype WriteConfig( STRING );
 
 WriteConfig(info) 
 
 fileName;    
 
OBJECT  configDoc, child1,child2;
 begin   
     
set  configDoc   CoCreateObject( " MSXML.DOMDocument );
     fileName
INSTALLDIR ^ oceswebs//Web.config ;  
    
 MessageBox(fileName,@R_446_4045@ION);
    
if  configDoc.Load(fileName)  then
        
 child1   configDoc.selectSingleNode( //configuration/appSettings/add[@key='CONNECTIONSTRINGFORPROVINCE']/@value );
             
 child2  //configuration/connectionStrings/add[@name='CONNECTIONSTRINGFORPROVINCE']/@connectionString );
             child1.text
info;
             child2.text
info;
            
            
MessageBox(child.text,@R_446_4045@ION); 
    
else
        MessageBox(
未找到Web.Config配置文件 ,@R_446_4045@ION) ;
    endif;
       configDoc.save(fileName);     
    
nothing ;
 
end
set  configDoc  =  CoCreateObject( " MSXML.DOMDocument );创建对象后,即可轻松通过XPATH操作XML了
例2:使用ADO:

  // 测试数据库连接方法
参数:SERVERNAME,服务器名 dbnAME,数据库 DBUSER 用户名 PWD,   登陆密码 ATHMODE    登陆模式 0为sql登陆模式,1为WINDOWS验证登陆模式 返回值 -1,无法连接不上sql server  返回值  0  连接上sql server 但无此数据库  返回值  1  连接上sql server 并存在此数据库 #ifndef    CONNDB
#define    CONNDB   
1
  prototype ConnDB(STRING,STRING,NUMBER);   
  
function  NUMBER ConnDB(SERVERNAME,dbnAME,DBUSER,PWD,ATHMODE)
    OBJECT oADOcnn, oADOrs;
    STRING svCnn, svsql;
    NUMBER nvReturn, nvSize, nvFileHandle;
    STRING svResult, szPath, szFileName, svBuffer, szTmp;
    STRING gssqlServer, gssqlUID, gssqlPass, gssqldbname;
    BOOL gbWindowsLogin;
begin
    
    
gssqlServer = "192.168.75.80";        gssqldbname="solotemp"; gssqlUID = "sa"; gssqlPass = "iflyecl";     gssqlServer  =   SERVERNAME; 
    gssqldbname 
 dbnAME; 
    gssqlUID 
 DBUSER;  
    gssqlPass
 PWD;
    gbWindowsLogin 
 ATHMODE;  

    
if  (gbWindowsLogin   TRUE) then 
        svCnn 
" Provider=sqlOLEDB.1;Integrated Security=sspI;Persist Security Info=False;User ID= ;
        svCnn 
 svCnn  +  gssqlUID  ;Initial Catalog=master;Data Source=  gssqlServer;
    
else
        svCnn 
Provider=sqlOLEDB.1;Password=  gssqlPass  ;Persist Security Info=True;User ID=  gssqlServer;
    endif;
    
login to the master database     
    
try
        set oADOcnn 
 CreateObject( ADODB.Connection );
    
catch
        MessageBox (
Error :  Err.Description , WARNING);
        nvReturn
-
        
return  nvReturn;
    endcatch;
        
    oADOcnn.ConnectionTimeout 
32 ;
    oADOcnn.CommandTimeout 
8 ;
    oADOcnn.CursorLocation 
3 adUseClient   
    oADOcnn.Open(svCnn);   
    
   
        MessageBox (
;    
        
 nvReturn;
    endcatch;
    oADOcnn.CommandTimeout 
adUseClient adOpenDynamic =2 , adOpenForwardOnly =0  adLockReadOnly =1, adLockOptimistic =3     
    svsql 
Select * from sysdatabases where [name] = N' gssqldbname ' MessageBox(svsql,@R_446_4045@ION);     set oADOrs   oADOcnn.Execute(svsql);
    
 ( ! oADOrs.BOF) then
        MessageBox
Database   exists ;
    

        MessageBox
 Does NOT exists,GO on to Creat it 4045@ION);
        nvReturn
0 ;
    endif;
    set oADOrs 
 NULL;
    
    oADOcnn.Close();
    set oADOcnn 
 NULL;
      
  nvReturn;

end;
3.调用批处理bat:
                            sMsg Excute Configure file and sql

.
;
                               SdShowMsg (sMsg, TRUE);
                               result 
 result   LaunchAppAndWait(INSTALLDIR ^ Component//config.bat "" | LAAW_OPTION_HIDDEN);
                             sCmdLine
 sServerName  / + sUserName+ / + sPWD+ 
                              result 
Component//setup2.bat LAAW_OPTION_HIDDEN); 
                            SdShowMsg (sMsg, FALSE);  
调用bat很简单,想提醒下如果把参数传入bat的话。我被搞的很郁闷。注意引号,免得传错,还是用例子说明吧:
setup2.bat的内容如下:
@echo off
sqlcmd.exe    % 2 c:/ecl/ecl_init2.sql "

我要把 server name,username,password传入,即
sServerName+" /""+ sUserName+/+ sPWD+ ; 传入,关于 LaunchAppAndWait提醒一点,开始以为它和 LaunchApp一样,只要找到bat,或exe文件,运行即返回值即返回0,安装程序就控制不了它了,当我用它来启动一个服务时,结果服务启动失败,返回了-1。我到处MessageBox也找到这个原因。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐