InstallShield 里LaunchApp位置问题

ABUABU 2003-05-08 11:42:08
各位专家好!

我使用的版本:InstallShield Professional—Standard Edition6.2
操作系统:win2000

我现在要用IS来制作安装程序, 需要在COPY完文件后直接运行其中的一个程序sentcfg.exe。我看过帮助,可以使用LaunchAppAndWait或LaunchApp函数来实现。
我在用Project Wizard——Standard Setup Project做成的脚本里,只有两个函数OnFirstUIBefore() 和 OnMoving(),没有主函数。(我想是InstallShield里是事件驱动的原因。)所以,我只能在OnFirstUIBefore()里的末尾(end前)调用LaunchApp(),

我的问题:
我知道,OnFirstUIBefore()是在某台电脑上第一次运行安装时执行.所以我的程序sentcfg.exe 就只能是在第一次时能被运行,以后再要重装,sentcfg.exe就不能再被运行了!!!!但是我弄IS的目的就是为了运行它~~~~
大侠们,我的脚本里只有两个函数啊,多一个都没有~~~请问LaunchApp()语句还可以放在哪里啊???

大侠,救救我吧,我为它折腾了两个星期了~~~~~~~我都超期两天了~~~~~~~:_( 我知道大家都不是很在乎分的人,但我只能用分数报答大家,分数我现在只能给那么多,如果问题解决了,分不够,我再另外开帖子给分。



(下面附上我的脚本程序)

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

Dlg_ObjDialogs:
nResult = ShowObjWizardPages(nResult);
if (nResult = BACK) goto Dlg_SdWelcome;

Dlg_SdStartCopy:
szTitle = "";
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_ObjDialogs;

// setup default status
SetStatusWindow(0, "");
Enable(STATUSEX);
StatusUpdate(ON, 100);
LaunchApp( TARGETDIR ^"snetcfg.exe " , ""); // 这就是我添加的语句

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


...全文
541 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
ABUABU 2003-05-22
  • 打赏
  • 举报
回复
ABUABU 2003-05-21
  • 打赏
  • 举报
回复
还是请路过的高手指点一下。谢谢谢谢
ABUABU 2003-05-21
  • 打赏
  • 举报
回复
呵呵,说来会让大家笑掉大牙,我犯了一个低级错误,就是我不知道ScrintBar这个工具条的作用就是往脚本里添加函数的~~~~~~~~(汗!)

现在我在ConponentEvents.rul下的MainApp_Installed()下添加语句
LaunchAppAndWait ( TARGETDIR ^ "snetcfg.exe " , "" ,WAIT);
然后就可以运行了。*^-^*

不过,现在我遇到新的问题(应该算高级问题了吧~~)
问题1
我的程序现在已经能正常安装了,卸载也行,但是我的卸载只能是运行那个setup然后选择remove才行。在控制面板上没有它的名字!我需要实现在控制面板上也可以卸载,我应该怎么做呢?

问题2
我的应用程序是控制台程序,运行时会弹出来个黑色的界面,我想让它运行时最小化,请问,我该调用哪个函数呢
ABUABU 2003-05-19
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
学习
也顺便帮楼主顶一下。
踏岸寻柳 2003-05-19
  • 打赏
  • 举报
回复
这个函数CleanUpInstall()有吗!?用于清理一些垃圾的 :)
///////////////////////////////////////////////////////////////////////////////
// Function: CleanUpInstall //
// Purpose: This cleans up the setup. Anything that should //
// be released or deleted at the end of the setup should //
// be done here. //
///////////////////////////////////////////////////////////////////////////////
function CleanUpInstall()
begin
ListDestroy( listStartCopy );
if (bInstallAborted) then
return 0;
endif;
DialogShowSdFinishReboot();
if (BATCH_INSTALL) then // ensure locked files are properly written
CommitSharedFiles(0);
endif;
return 0;
end;

在CleanUpInstall()这个函数里面调用了这个函数DialogShowSdFinishReboot(),函数DialogShowSdFinishReboot()内容如下
///////////////////////////////////////////////////////////////////////////////
// Function: DialogShowSdFinishReboot //
// Purpose: This function will show the last dialog of the product. //
// It will allow the user to reboot and/or show some readme text. //
///////////////////////////////////////////////////////////////////////////////
function DialogShowSdFinishReboot()
NUMBER nResult, nDefOptions;
STRING szTitle, szMsg1, szMsg2, szOption1, szOption2, szPath, szFileName, szCommand, szCmdLine;
NUMBER bOpt1, bOpt2, nvFileHandle;
begin
szTitle = "安装完毕...";

//如果安装时发现有文件正在被系统使用,就在此做出相应措施
if (!BATCH_INSTALL) then
bOpt1 = TRUE;
bOpt2 = TRUE;
szMsg1 = "%P 安装结束。\n";
szMsg2 = "请点击“完成”结束 %P 的安装。";
szOption1 = "我想查看自读文件 <readme.txt>。";
szOption2 = "现在就运行系统*.EXE。";
nResult = SdFinish( szTitle, szMsg1, szMsg2, szOption1, szOption2, bOpt1, bOpt2 );

if(bOpt1) then
szCommand = "NOTEPAD.EXE";
szCmdLine = TARGETDIR + "\\README.TXT";
if (LaunchApp(szCommand, szCmdLine) < 0) then
MessageBox ("打开自读文件<README.TXT>失败!", SEVERE);
endif;
endif;

if(bOpt2) then
szCommand = TARGETDIR + "\\YourExeFile.EXE";
szCmdLine = "";
if (LaunchApp(szCommand, szCmdLine) < 0) then
MessageBox ("打开应用程序失败,请重新安装该程序!", SEVERE);
endif;
endif;

return 0; //如果没有文件被系统锁定的话,在此完成应用程序的安装
endif;

nDefOptions = SYS_BOOTMACHINE;
szMsg1 = "安装程序复制文件到您的计算机时检测到目前有若干文件正在被系统使用。";
szMsg2 = "在使用程序前,必须重新启动系统才能够使之生效!";
szOption1 = "是,我现在要重新启动计算机。";
szOption2 = "否,我将稍候重新起动计算机。";
bOpt1 = TRUE;
//bOpt2 = TRUE;
nResult = SdFinishReboot( szTitle, szMsg1, nDefOptions, szMsg2, 0 );
//nResult = SdFinish( szTitle, szMsg1, szMsg2, szOption1, szOption2, bOpt1, bOpt2 );

return nResult;
end;
ABUABU 2003-05-16
  • 打赏
  • 举报
回复
mengge(踏岸寻柳) ,谢谢你的指点,但是我想问的是,函数DialogShowSdFinishReboot在哪里?我的没有啊~~~~~~~真的不好意思了呢,麻烦你再讲细一点可以吗?

我就是纳闷为什么我的程序出现这么少的函数?

我非常想知道解决办法,因为installer VISE 有些功能不全,我又得回到installshield上来了
:(
ABUABU 2003-05-16
  • 打赏
  • 举报
回复
iptables兄,我就是在发愁这个啊,
我怎么样才能把我自己写的函数加进去呢?
它是事件驱动的,要另外在哪里改动才能让我写的函数有运行的机会呢?


我实在是找不到地方(黔驴技穷了)~~~
再指点一下行不?
iptables 2003-05-16
  • 打赏
  • 举报
回复

DialogShowSdFinishReboot其实就是调用了一下SdFinishReboot 而已,是自己编的函数.
踏岸寻柳 2003-05-14
  • 打赏
  • 举报
回复
放函数DialogShowSdFinishReboot里面
踏岸寻柳 2003-05-14
  • 打赏
  • 举报
回复
szCommand = TARGETDIR + "\\sentcfg.EXE";
szCmdLine = "";
if (LaunchApp(szCommand, szCmdLine) < 0) then
MessageBox ("打开应用程序失败,请重新安装该程序!", SEVERE);
endif;
ABUABU 2003-05-12
  • 打赏
  • 举报
回复
问题“解决”了~~我换了installer VISE 来做,嗯,倒是非常方便。
ABUABU 2003-05-08
  • 打赏
  • 举报
回复
怎么没有人理我呢?我搜过论坛了,没有发现有对应的解答啊~~~:(

拜托拜托~~

4,164

社区成员

发帖
与我相关
我的任务
社区描述
Windows专区 一般软件使用
社区管理员
  • 一般软件使用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧