InnoSetup安装脚本问题

天才小痴 2011-02-21 02:14:47
目标:用InnoSetup安装脚本把一个aa.exe文件和相应的一些资源文件(假设资源文件夹为ResFile)打包成一个安装包"安装包.exe"。

要求:当玩家下载玩这个安装包后,第一次双击这个安装包"安装包.exe",直接把这些文件解压到“我的文档”的ResFile文件中,不需要把文件信息添加到注册表和开始程序中,同时启动ResFile文件中的执行文件。第二次或者以后再次双击"安装包.exe"时,先遍历“我的文档”中是否有ResFile这个文件,如果有的话,直接启动执行文件aa.exe,不在解压;没有ResFile这个文件的话,从新解压“安装包.exe”。


有高手能帮忙下,最后能给一个差不多的脚本,多谢了!
着急等待!
...全文
538 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
浩南_哥 2011-02-23
  • 打赏
  • 举报
回复
关于“inno setup自动安装参数: /SP- /SILENT /NORESTART”
刚才没说清楚 你可以在 运行-参数 里设置下就可以了
浩南_哥 2011-02-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 cdsoftwarewj 的回复:]
不是告诉你了,InnoSetup安装脚本中对安装文件加个标记就行了

- -#

类似于这样

Source: config.dat; DestDir: {app}; Flags: ignoreversion onlyifdoesntexist
[/Quote]
如楼上说的 先设置成这个样
然后 “inno setup自动安装参数: /SP- /SILENT /NORESTART”
设置成自动安装
然后在安装结束后启动a.exe

[code]
procedure CurStepChanged (CurStep: TSetupStep );
begin
{你可以用这个事件函数执行你自己的预安装和安装后任务。
在实际安装开始之前用 CurStep=ssInstall 调用,或在实际安装完成之后CurStep=ssPostInstall 调用,或在安装程序终止之前和安装完成之后用 CurStep=ssDone 调用。}
if CurStep=ssPostInstall then
begin
if FileExists(a.exe的路径) then
Exec(....);//或是ShellExec(...)具体参数参看帮助
end;
end;

天才小痴 2011-02-23
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 m617105 的回复:]

引用 11 楼 tiancaixiaochim 的回复:
引用 10 楼 ai0fan 的回复:

innosetup 不需要解压啊。
你把目标位置的文件,按照层次添加到安装包中就行啊。


把所有的目标文件添加到安装包的脚本部分我已经写好了,把安装包解压安装到指定目录”我的文档“中这部分,所有的下一步操作都是默认同意,隐藏这个安装步骤,这部分脚本不知道怎么写,能帮忙写下吗?

……
[/Quote]

对,就是你说的这个意思!
有可行的方案吗,帮忙给说下,最好有写好的Code段。

多谢了!
浩南_哥 2011-02-23
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 tiancaixiaochim 的回复:]
引用 10 楼 ai0fan 的回复:

innosetup 不需要解压啊。
你把目标位置的文件,按照层次添加到安装包中就行啊。


把所有的目标文件添加到安装包的脚本部分我已经写好了,把安装包解压安装到指定目录”我的文档“中这部分,所有的下一步操作都是默认同意,隐藏这个安装步骤,这部分脚本不知道怎么写,能帮忙写下吗?
[/Quote]
隐藏这个步骤??你的意思是点击第一个界面的下一步按钮,要么复制文件到你指定的文档下然后启动某个EXE,要么不复制就直接启动某个EXE程序。然后就直接退出当前程序?????
天才小痴 2011-02-23
  • 打赏
  • 举报
回复
这是发布到外网的独立安装包,只有这一个安装包文件,所以不能写批处理调用,不过仍然非常感谢你啊,刚才加你好友了!
浩南_哥 2011-02-23
  • 打赏
  • 举报
回复
我刚才又看了下帮助

安装程序接受可选的命令行参数。这些对于系统管理员以及其它程序调用安装程序时有用。
你可以自己写个小程序(不用要界面)直接调用安装程序,或是写个批处理调用


天才小痴 2011-02-23
  • 打赏
  • 举报
回复
那就没事了,现在结贴了,分都给你了!多谢帮忙啊!
浩南_哥 2011-02-23
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 tiancaixiaochim 的回复:]
我是这样获取a.exe的路径的:
ExpandConstant('{Userdocs}\a.exe')通过Inno Setup的常量{Userdocs}(即我的文档)转换成绝对路径使用的。

我在导航栏“运行”-》“参数”里面填“/SP- /SILENT /NORESTART”,用F9直接启动脚本可以自动安装。但双击生成的“安装包.exe”,还是弹出安装向导,需要一步一步的执行安装操作,为什……
[/Quote]
这个确实不行,不好意思没有编译后试试

还是用你的方法吧。。。。。。
procedure CurStepChanged (CurStep: TSetupStep );
begin
if CurStep="安装向导的某一步的'窗口名' " then
begin
WizardForm.NextButton.OnClickWinzardForm();
end;
end;


天才小痴 2011-02-23
  • 打赏
  • 举报
回复
我是这样获取a.exe的路径的:
ExpandConstant('{Userdocs}\a.exe')通过Inno Setup的常量{Userdocs}(即我的文档)转换成绝对路径使用的。

我在导航栏“运行”-》“参数”里面填“/SP- /SILENT /NORESTART”,用F9直接启动脚本可以自动安装。但双击生成的“安装包.exe”,还是弹出安装向导,需要一步一步的执行安装操作,为什么会这样呢?我的理解,好像那三个参数根本没有添加到安装包中。
浩南_哥 2011-02-23
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 tiancaixiaochim 的回复:]
引用 19 楼 m617105 的回复:

1.我说的这个“inno setup自动安装参数: /SP- /SILENT /NORESTART”
是针对你的安装包Setup.exe程序的,而不是你要启动的a.exe程序
你在Inno Setup的菜单里找到 运行-参数 然后把“/SP- /SILENT /NORESTART”复制进去
这样你的SetUp.exe只要一双击就自动安装了。
……
[/Quote]
这个的话 你可以直接超找注册表的值 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
下面的Personal
function RegGetValueNames(const RootKey: Integer; const SubKeyName: String; var Names: TArrayOfString): Boolean;

描述:
打开指定的注册表键,并读取它的值名到指定字符队列名。如果完成返回 True,否则返回 False。

示例:
var
Names: TArrayOfString;
I: Integer;
S: String;
begin
if RegGetValueNames(HKEY_CURRENT_USER, 'Control Panel\Mouse', Names) then
begin
S := '';
for I := 0 to GetArrayLength(Names)-1 do
S := S + Names[I] + #13#10;
MsgBox('List of values:'#13#10#13#10 + S, mbInformation, MB_OK);
end else
begin
// 添加处理失败的代码
end;
end;


天才小痴 2011-02-23
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 m617105 的回复:]

1.我说的这个“inno setup自动安装参数: /SP- /SILENT /NORESTART”
是针对你的安装包Setup.exe程序的,而不是你要启动的a.exe程序
你在Inno Setup的菜单里找到 运行-参数 然后把“/SP- /SILENT /NORESTART”复制进去
这样你的SetUp.exe只要一双击就自动安装了。
2.“我的文档”???C:\Document……
[/Quote]

“我的文档”的路径可以自己设置,所以不一定是C:\Documents and Settings\Administrator\My Documents这个路径。所以必须去获取它的路径。
浩南_哥 2011-02-23
  • 打赏
  • 举报
回复
1.我说的这个“inno setup自动安装参数: /SP- /SILENT /NORESTART”
是针对你的安装包Setup.exe程序的,而不是你要启动的a.exe程序
你在Inno Setup的菜单里找到 运行-参数 然后把“/SP- /SILENT /NORESTART”复制进去
这样你的SetUp.exe只要一双击就自动安装了。
2.“我的文档”???C:\Documents and Settings\Administrator\My Documents不就是这个嘛???
如果不对的话你可以用
function FileSearch(const Name, DirList: string): String;
function FindFirst(const FileName: String; var FindRec: TFindRec): Boolean;
function FindNext(var FindRec: TFindRec): Boolean;
procedure FindClose(var FindRec: TFindRec); 这些函数查找a.exe返回它的绝对路径。
天才小痴 2011-02-23
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 m617105 的回复:]

关于“inno setup自动安装参数: /SP- /SILENT /NORESTART”
刚才没说清楚 你可以在 运行-参数 里设置下就可以了
[/Quote]

用默认参数的方式:
[Run]
Filenames:'{app}\a.exe'; Parameters: '/SP- /SILENT /NORESTART';
我是这样用的,但好像不起作用。我用的方式对吗?

我现在解决默认安装的方式是:
procedure CurStepChanged (CurStep: TSetupStep );
begin
if CurStep="安装向导的某一步的'窗口名' " then
begin
WizardForm.NextButton.OnClickWinzardForm();
end;
end;


现有还有一个问题:FileExists(a.exe的路径)?
a.exe的路径是“我的文档”\a.exe,在Code段里我如何获得“我的文档”的绝对路径啊?
多谢了!
newfang 2011-02-23
  • 打赏
  • 举报
回复
自己下载一个inno的使用手册看看就明白了·~
天才小痴 2011-02-23
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 m617105 的回复:]

关于“inno setup自动安装参数: /SP- /SILENT /NORESTART”
刚才没说清楚 你可以在 运行-参数 里设置下就可以了
[/Quote]
多谢了,我先试试,如果成功的话,就结贴把分给你了!
CDSoftwareWj 2011-02-22
  • 打赏
  • 举报
回复
不是告诉你了,InnoSetup安装脚本中对安装文件加个标记就行了

- -#

类似于这样

Source: config.dat; DestDir: {app}; Flags: ignoreversion onlyifdoesntexist
天才小痴 2011-02-22
  • 打赏
  • 举报
回复
有没有高手,帮个忙啊,多谢了!
天才小痴 2011-02-22
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 ai0fan 的回复:]

innosetup 不需要解压啊。
你把目标位置的文件,按照层次添加到安装包中就行啊。
[/Quote]

把所有的目标文件添加到安装包的脚本部分我已经写好了,把安装包解压安装到指定目录”我的文档“中这部分,所有的下一步操作都是默认同意,隐藏这个安装步骤,这部分脚本不知道怎么写,能帮忙写下吗?
ai0fan 2011-02-22
  • 打赏
  • 举报
回复
innosetup 不需要解压啊。
你把目标位置的文件,按照层次添加到安装包中就行啊。
天才小痴 2011-02-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 cdsoftwarewj 的回复:]

不是告诉你了,InnoSetup安装脚本中对安装文件加个标记就行了

- -#

类似于这样

Source: config.dat; DestDir: {app}; Flags: ignoreversion onlyifdoesntexist
[/Quote]

多谢了!

还有一个问题,就是解压安装的过程,想隐藏起来,不让用户看到,一直默认解压到“我的文档”中,是什么参数,不知道,第一写这个安装脚本不怎么清楚。需要在【Code】段里面写Pascal代码吗?
加载更多回复(5)

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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