怎样在InstallShield制作的安装文件中写一个磁盘文件?
我想在InstallShield打包的安装文件中添加一个页面
让用户输入一些信息
然后将这些信息存到一个磁盘文件中
如何实现?
问题点数:50、回复次数:5Top
1 楼PerfectCK()回复于 2002-05-28 16:22:34 得分 25
给你一个函数,参数是你要写的字符串
function WriteFile(LogString)
STRING LogFileName,svResult,svResult2,CKSresult;
NUMBER nvResult,CKNresult;
HWND LogFileWND;
NUMBER nResult;
begin
nResult=FindFile ("这里是目标目录","这里填写你的文件名称",LogFileName);
if nResult<0 then//没有则创建文件
OpenFileMode (FILE_MODE_APPEND);
CreateFile(LogFileWND,"这里是目标目录","这里填写你的文件名称");
CloseFile(LogFileWND);
endif;
OpenFileMode (FILE_MODE_APPEND);
OpenFile (LogFileWND,"这里是目标目录","这里填写你的文件名称");
//写入字符串
GetSystemInfo (DATE, nvResult, svResult);
GetSystemInfo (TIME, nvResult, svResult2);
LogString=svResult+" "+svResult2+" "+LogString;
WriteLine(LogFileWND,LogString);
CloseFile(LogFileWND);
end;Top
2 楼Skeleton(一堆骨头)回复于 2002-05-30 10:46:10 得分 0
能不能说的详细点
我第一次用InstallShield
只用Visual Basic Project Wizard打包过几个工程
连怎么添加新的页面都不会
多谢!
Top
3 楼zhjin2000(鸟)回复于 2002-05-31 11:59:17 得分 25
在你的脚本里可以找到以下的这个位置
//////////////////////////////////////////////////////////////////////////////
//
// 函数: OnFirstUIAfter
//
// 事件: 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,szTitle1,szMsg1, szMsg2, szMsg3,szField1,svEdit1, szOption1, szOption2,szCmdLine;
NUMBER bOpt1, bOpt2;
//写文件
STRING LogFileName,svResult,svResult2,CKSresult,Fname;
NUMBER nvResult,CKNresult;
HWND LogFileWND;
NUMBER nResult,nResult1;
begin
//写文件
szTitle1 = "SQLServer服务器名称";
szMsg3 = "请输入您要连结的SQLServer服务器名称";
szField1 = "服务器名称:";
svEdit1 = "Server";
Fname = "myinfo.dat";
nResult1=FindFile (TARGETDIR ,Fname,Fname);
if nResult1<0 then//没有则创建文件
OpenFileMode (FILE_MODE_APPEND);
CreateFile(LogFileWND,TARGETDIR,Fname);
CloseFile(LogFileWND);
endif;
OpenFileMode (FILE_MODE_APPEND);
OpenFile (LogFileWND,TARGETDIR,Fname);
//写入字符串
nResult=SdShowDlgEdit1 (szTitle1, szMsg1, szField1, svEdit1);
if nResult < 0 then
MessageBox ("SQLServer服务器名称注册失败!", SEVERE);
endif;
GetSystemInfo (DATE, nvResult, svResult);
GetSystemInfo (TIME, nvResult, svResult2);
svEdit1=svResult+" "+svResult2+" "+svEdit1;
WriteLine(LogFileWND,svEdit1);
CloseFile(LogFileWND);
bOpt1 = FALSE;
bOpt2 = FALSE;
szMsg1 = "1234"
szMsg2 = "请浏览本主机网络服务器上的 web 虚拟目录\n\n 例:\n http://Localhost/web/index.asp";
szOption1 = "";
szOption2 = "";
szTitle = "实物借阅安装完成";
SdFinishEx(szTitle,szMsg1,szMsg2,szOption1,szOption2,bOpt1,bOpt2);
return 0;
end;
附函数说明:
FindFile
语法:FindFile (szPath, szFileName, svResult);
说明:FindFile函数在一个目录中查找一指定文件。InstallShield在参数svResult返回第一个匹配的文件。
参数:
szPath
指定要查找的目录名。该目录下的子目录不被查找。
szFileName
指定要查找的文件名。该参数允许通配符。
svResult
返回与szFileName匹配的第一个文件的文件名。该参数包含未限定文件名(也就是,不包括驱动器指示符和路径)。
返回值:
0:表明函数成功找到并返回指定文件。
< 0:表明函数未能找到文件。
注解:
·该函数只查找指定子目录。它不查找整个磁盘或目录树。
CreateFile
语法:CreateFile (nvFileHandle, szPath, szFileName);
说明:CreateFile函数创建一个新文件。如果相同名的文件已经存在,CreateFile改写它。在你用CreateFile创建一个文件前,你必须用OpenFileMode设置文件方式。
CreateFile将新创建的文件打开为读/写(二进制文件)或添加(文本文件)方式,因此你可以使用其它函数,如GetLine, ReadBytes, WriteLine和 WriteBytes.来从文件中读或写到文件中。
除了读/写或添加方式,所有新创建文件自动打开为OF_SHARE_DENY_NONE方式。这意谓着文件被打开为不拒绝其它程序对它的读或写。这种方式的根段记录在Windows OpenFile API中。当你结束从一个文件读或对它写时,你必须使用CloseFile函数来关闭该文件。
参数:
nvFileHandle
返回新文件的句柄。
szPath
指定新文件创建所在的子目录的全限定路径。
szFileName
指定创建的文件的文件名。
返回值:
0:表明函数成功创建新文件。
< 0:表明函数未能创建新文件。
注解:
·CreateFile创建一个新文件并把它打开以便你可以从新文件中读或写到新文件中。为写到一个现存文件中,你必须首先用OpenFileMode 和OpenFile函数以FILE_MODE_APPEND方式打开文件。
·当操作日志被激活时,CreateFile的函数操作不存入到卸载记录中。如果你想要一个由CreatFile创建的文件被存入到卸载记录中,则当存入功能被激活时,使用XcopyFile传输一个启动程序文件(以你要的文件名)到目标系统。你用Enable 和Disable函数激活和禁用存入功能。当存入功能被激活时,XcopyFile操作被存入,启动程序文件被存入后,你可以使用CreatFile和其它文件相关函数来写或改写被存入的启动程序文件。文件名必须保持不变否则它不会在卸载记录中找到。Top
4 楼zhjin2000(鸟)回复于 2002-05-31 12:04:45 得分 0
可以用AskText函数代替以上SdShowDlgEdit1 函数让用户输入比较多的数据
AskText
语法:AskText (szQuestion, szDefault, svResult);
说明:AskText函数显示一个对话框,它包括一个静态文本区和一个编辑框。参数szQuestion指定静态文本区的缺省文本;参数szDefault指定编辑框的缺省文本。该对话框的缺省标题是输入信息Enter Information。为改变标题栏的内容,在调用AskText前调用SetDialogTitle。
参数:
szQuestion
指定要显示的问题或声明。如果该参数位置的字符串长度超过静态文本区宽度,一个或多个行分隔符将会被插入该字符串使得它在对话框多行显示。如果愿意,用户也可以自己通过插入换行符(\n)手动格式化该字符串。该参数没有一个缺省值。
szDefault
指定编辑区的缺省文本。
svResult
当Next按钮被用来关闭对话框时返回由最终用户输入的文本。如果用户按下Back按钮,svResult值将不可预测。因此,如果用户在szDefPath和svResultPath使用相同的变量,那么需确保当AskPath的返回值为BACK时重初始化该变量。
返回值:
NEXT (1):表明Next按钮被按下。
BACK (12):表明Back按钮被按下。
注解:
·用户在svResult传递的字符串变量必须足够大以适应输入到编辑区的文本。因此,用户必须使用自动调节大小的方法来声明变量。
·必要时,编辑区将会滚动来以适应一个长字符串。
Top
5 楼Skeleton(一堆骨头)回复于 2002-06-06 13:20:48 得分 0
这几天不能上网
问题我已经解决了
不过还是要感谢两位的帮助
Top




