加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 15:49:32 所属栏目:MsSql教程 来源:网络整理
导读:Install Shield Script小结(调用api,com,bat) 老大让我在先前打包程序基础上,把现在项目打包了(web项目)。基本要求是这样子的,用项目包括所需的控件,建虚拟目录。在用户可对SQLSERVER 对行配置,也可安装包内SQLEXPRESS(如果用户配置后无法连接且判
Requires Advapi32.dll.

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,INFORMATION);
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,INFORMATION);
????
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,INFORMATION);?
????
else
????????MessageBox(
未找到Web.Config配置文件,INFORMATION)?;
????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,INFORMATION); ????set?oADOrs? ?oADOcnn.Execute(svSQL);
????
?( ! oADOrs.BOF)?then
????????MessageBox(?
Database? ?exists ;
????

????????MessageBox(?
?Does?NOT?exists,GO?on?to?Creat?it 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.batLAAW_OPTION_HIDDEN);?
????????????????????????????SdShowMsg?(sMsg,?FALSE);??
调用bat很简单,想提醒下如果把参数传入bat的话。我被搞的很郁闷。注意引号,免得传错,还是用例子说明吧:
setup2.bat的内容如下:
@echo?off
sqlcmd.exe??S?%U?2P?i?c:/ecl/ecl_init2.sql"
我要把 server name,username,password传入,即sServerName+"?/""+?sUserName+/+?sPWD+?; 传入,关于LaunchAppAndWait提醒一点,开始以为它和LaunchApp一样,只要找到bat,或exe文件,运行即返回值即返回0,安装程序就控制不了它了,当我用它来启动一个服务时,结果服务启动失败,返回了-1。我到处MessageBox也找到这个原因。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

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 information is provided by the interface.

BOOL GetUserName(
LPTSTR lpBuffer,
LPDWORD nSize
);
.......
DLLUnicode
    推荐文章
      热点阅读