2012-10-16 39 views
2

我正在准备inno安装程序,以同时安装Windows窗体应用程序和办公室加载项。 我在安装过程中部署了我所有的Windows窗体文件(exe和dll)和办公室加载项部署文件,并且所有工作都正常。 但最后,我得到了“安装完成”屏幕,而办公室插件“setup.exe”仍在运行。我不在乎在另一个应用程序运行时看到其他已安装的运行或弹出窗口,但我不喜欢inno安装程序显示“已完成”。安装Inno运行办公室加载项安装程序并等待它

这是我的代码:

[Run] 
Filename: "{app}\AddIn\Deploy\setup.exe"; Flags: waituntilterminated runminimized 
Filename: "{app}\MyApp.exe"; Description: {cm:LaunchProgram,{cm:MyAppName}}; Flags: nowait postinstall 

因此,它不服从“runminimized”,这我没事反正....但它不服从“waituntilterminated”要么,我照顾。

请注意,“AddIn \ Deploy \ setup.exe”是由Visual Studio通过Office加载项的“发布”向导生成的文件。

我会很高兴,如果我只能运行此代码:

[code] 
function PrepareToInstall(var NeedsRestart: Boolean): String; 
var 
    ResultCode : Integer; 
begin 

    if Exec(ExpandConstant('{app}\AddIn\Deploy\setup.exe'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then 
    begin 
    Result := 'AddIn Installed'; 
    end 
    else 
    Result := 'AddIn NOT Installed'; 

    NeedsRestart := false; 
end; 

但是,我将不得不运行后权的主要INNO安装程序的文件复制到“加载项\部署”目录.. 所以,我可能只需要正确的事件来覆盖。

+0

您可以创建文件夹并手动提取该文件,但它是相当矫枉过正。安装成功后立即怎么样,在'CurStepChanged'事件中'CurStep'将会是'ssPostInstall'? – TLama

+0

@TLama我尝试了你的建议,但是我的效果是一样的,当加载项设置仍在运行时,总是显示“完成”对话框。 –

+1

然后,加载项设置必须创建一个单独的进程并退出。 '[Run]'节中的'waituntilterminated'标志也可以正常工作。你可以简单地通过执行'notepad.exe'。您将看到在关闭记事本实例之前不会显示结束页面。 – TLama

回答

3

您提交的代码可以增强:

[code] 
    function PrepareToInstall(var NeedsRestart: Boolean): String; 
    var 
    ResultCode : Integer; 
    begin 
    // Your original line: 
    // if Exec(ExpandConstant('{app}\AddIn\Deploy\setup.exe'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then 
    if Exec(AddQuotes(ExpandConstant('{app}\AddIn\Deploy\setup.exe')), AddQuotes(ExpandConstant('{app}\AddIn\Deploy\')), '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then 
     begin 
     Result := 'AddIn Installed'; 
     end 
    else 
     begin // <== 
     Result := 'AddIn NOT Installed'; 
     end; // <== 
    NeedsRestart := false; 
    end; 

的{应用}可能包含空格和功能AddQuotes并围绕字符串创建行情如果字符串包含空格 exec函数,在我看来, ,就像一个快捷方式,所以给应用程序一个工作目录。因为我不知道Setup.exe的性质,所以我将此应用程序作为工作目录与应用程序所在的文件夹相同。

有点偏题: 在最终版本中使用SW_Hide。 如果应用程序已经安装了外挂程序,结果总是可以看到,如果其他模式被选中,而不是SW_HIDE :)

+1

这些都不会改变被调用设置的异步特性。 – Deanna

相关问题