查看完整版本: [-- inno setup 封装程式加入另外一个msi档 --]

汉化新世纪论坛 -> 安装与补丁 -> inno setup 封装程式加入另外一个msi档 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

martinjc 2009-04-20 21:02

inno setup 封装程式加入另外一个msi档

请问大大,已经困扰很多天了
就是在封装档案的时候,加入一个msi档案
在做完后的exe档案,执行时,先要检查user电脑中是否有安装这一个msi档案
要是没有,这一个msi档案要被先执行安装
执行完毕后,才执行主要安装的档案,
试了很多次,也爬了论坛中的资料
现在只能分成两次安装,就是将msi档案与要封装的资料个别做成两个exe
在包在一起成为第三个exe
但是如此一来,程式安装就会变成两次时间,非常不够smart
所以上来请教各位前辈,是否有方式可以解决?
小弟我在此拜托各位了

以下是源码
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "My Program"
#define MyAppVerName "My Program 1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "MyProg.exe"

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{1677F555-67A9-40BE-9E45-578CE232D26A}
AppName={#MyAppName}
AppVerName={#MyAppVerName}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputDir=C:\Documents and Settings\Administrator\桌面
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Languages]
Name: english; MessagesFile: compiler:Default.isl

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked

[Files]
Source: C:\Program Files\Inno Setup 5\Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion
Source: C:\Documents and Settings\Administrator\桌面\test.exe; DestDir: {app}; Flags: ignoreversion
Source: C:\Documents and Settings\Administrator\桌面\0412\test2.msi; DestDir: {app}; Flags: ignoreversion
Source: C:\Documents and Settings\Administrator\桌面\0412\setup.exe; DestDir: {app}; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Run]
Filename: {app}\setup.exe
Filename: {app}\test.exe



Filename: {app}\{#MyAppExeName}; Description: {cm:LaunchProgram,{#MyAppName}}; Flags: nowait postinstall skipifsilent
[InstallDelete]
Name: {app}\BeanFun.msi; Type: files; Tasks: ; Languages:
Name: {app}\game_and_beanfun.exe; Type: files
Name: {app}\MyProg.exe; Type: files
Name: {app}\setup.exe; Type: files

WLDNA 2009-04-21 08:27
这样应该就可以了啊,何必多做一个呢


[Files]
Source: MyPackage.msi; DestDir: {tmp}
[Run]
Filename: {%COMSPEC}; Parameters: /C msiexec -i {tmp}\MyPacakge.msi; WorkingDir:{tmp}; StatusMsg: "Installing my package"
;
; or
;
[Run]
Filename: msiexec.exe; Parameters: "-i ""{src}\MyPacakge.msi"" -qn"; WorkingDir: "{src}"; StatusMsg: "Installing my package"

martinjc 2009-04-21 10:15
QUOTE(WLDNA @ 2009年 04月 21日 08时 27分) [snapback]357038[/snapback]

这样应该就可以了啊,何必多做一个呢


[Files]
Source: MyPackage.msi; DestDir: {tmp}
[Run]
Filename: {%COMSPEC}; Parameters: /C msiexec -i {tmp}\MyPacakge.msi; WorkingDir:{tmp}; StatusMsg: "Installing my package"
;
; or
;
[Run]
Filename: msiexec.exe; Parameters: "-i ""{src}\MyPacakge.msi"" -qn"; WorkingDir: "{src}"; StatusMsg: "Installing my package"


感谢大大提供这一个方法
这一个作法,测试后发现,目录位置{src}的部份,需要改为{tmp},msi档案才会执行的到
Filename: msiexec.exe; Parameters: "-i ""{tmp}\test2.msi"" -qn"; WorkingDir: {tmp}; StatusMsg: Installing my package

可是若是要包在一起,msi档案需要先被执行检查、安装后,才会进行后续的安装
也就是说安装前,会先检查电脑中是否有一个msi档案,若是有,跳过安装,若是没有,就安装
等msi安装成功后,在继续后续的安装

不晓得大大是否还有可以解决的办法,在此先谢谢。

WLDNA 2009-04-21 13:39
呵呵 如果先这样的话,就得借助[CODE]段了,

给你个简单的实例吧,其他的部分就需要你自己多看看帮助文件喽
QUOTE

[code]

//该过程有所有页面的控制,你可以选择在某个页面进行你的检查,安装
//这里我使用准备完成页面
procedure CurPageChanged(CurPageID: Integer);
var
ErrorCode: Integer;

begin
Case
CurPageID of

 
wpWelcome:
    begin
   
//这里插入你想做的事儿
   
end
 
wpReady:
    begin
   
//这里可以放你的检查代码,
   
end

 
wpPreparing:
    begin
   
ExtractTemporaryFile('test2.msi')
    Exec('msiexec.exe', ExpandConstant('"-i ""{tmp}\test2.msi"" -qn"'),'',SW_HIDE, ewWaitUntilTerminated, ErrorCode);
    end
end
;

end;


duchovny 2014-06-15 15:00
Exec('msiexec.exe', ExpandConstant('"-i ""{tmp}\test2.msi"" -qn"'),'',SW_HIDE, ewWaitUntilTerminated, ErrorCode);
这句话根据我本地的测试 应该改一下:

静默安装
Exec('msiexec.exe', ExpandConstant('"-i  {tmp}\test2.msi -qn"'),'',SW_HIDE, ewWaitUntilTerminated, ErrorCode);
如果不希望静默安装 要这么写
Exec('msiexec.exe', ExpandConstant('"-i ""{tmp}\test2.msi"" -qf"'),'',SW_HIDE, ewWaitUntilTerminated, ErrorCode);




具体安装还有一些参数可以设置,在windows的CMD中打个msiexec有详细的说明

hbfnmxb 2016-03-04 09:39
想找一个解决MSI的程序,这个先标记一下吧


查看完整版本: [-- inno setup 封装程式加入另外一个msi档 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Time 0.013674 second(s),query:3 Gzip disabled