2016-05-10 5 views
0

У меня есть один файл .msi и два файла предварительных условий. В соответствии с моим кодом установка будет выполнять основной файл exe из файла .msi после успешной установки. Но если предыдущая версия .msi-файла уже установлена, она поставляется с опцией Repair and Remove. Мой раздел Run работает после того, как я удалил .msi-файл, и я хочу выйти из приложения после удаления файла msi или не выполнить раздел Run. Может кто-нибудь предложить мне некоторые решения?Отменить установку, если зависимость не установлена ​​

Вот мой Run раздел:

[Run] 
Filename: "{app}\{#MyAppExeName}"; Parameters: "/verysilent /group=""{groupname}\Macrowire 2.5 Pro"" /mergetasks=""desktopicon,file_association"""; Flags: nowait postinstall; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; StatusMsg: "Installing Macrowire 2.5 Pro..." 

Вот мой Pascal код:

function PrepareToInstall(var NeedsRestart: Boolean): String; 
var 
    ResultCode: integer; 
begin 
    ... 
    if IsComponentSelected('Macrowire') or IsComponentSelected('Full') then 
    begin 
    ShellExec('', ExpandConstant('{app}\MacroWire 2.5 Pro.msi'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) 
    end; 
    ... 
end; 
+1

Не знаю, что вы хотите. 1. * В соответствии с моим кодом, установка будет excute main exe-файла из .msi-файла после успешной установки * - ваш код - это скрипт Inno Setup, так что же ему нужно делать с .msi-файлом? 2. Что такое 'MyAppExeName'? Параметры выглядят подозрительно, как параметры установщика Inno Setup. 3. * Раздел «Мой запуск» запускается после того, как я удалил файл .msi, и я хочу выйти из приложения после удаления файла msi или не выполнить раздел «Выполнить». * - Можете ли вы уточнить? Я совсем не понимаю. –

+0

@MartinPrikryl Главный файл exe, который я запускаю в разделе run, берется из файла файла msi. Это не имеет никакого смысла, запустив этот exe-файл после удаления этого .msi-файла (он показывает сообщение типа «can not to find the exe файл в заданном пути "), поэтому я хочу выйти из программы inno после этого удаления msi, и это не должно продолжаться дальше. Не следует запускать раздел Run. – preethi

+0

Итак, покажите нам свой код, чтобы удалить .msi. –

ответ

1

Вы, вероятно, хотите, чтобы прервать установку, когда зависимость не удается установить:

function PrepareToInstall(var NeedsRestart: Boolean): String; 
var 
    ResultCode: integer; 
begin 
    ... 
    if IsComponentSelected('Macrowire') or IsComponentSelected('Full') then 
    begin 
    { Using Exec, the ShellExec is an overkill } 
    Exec(ExpandConstant('{app}\MacroWire 2.5 Pro.msi'), '', '', SW_SHOW, 
     ewWaitUntilTerminated, ResultCode); 
    if not FileExists(ExpandConstant('{app}\{#MyAppExeName}')) then 
    begin 
     Result := 'Failed to install MacroWire'; 
     Exit; 
    end; 
    end; 
    ... 
end; 

Если вы хотите, чтобы продолжить установку, но вам просто нужно пропустить [Run] запись, используйте Check parameter:

[Run] 
Filename: "{app}\{#MyAppExeName}"; Parameters: "..."; Flags: nowait postinstall; \ 
    Description: "..."; Check: FileExists(ExpandConstant('{app}\{#MyAppExeName}')) 

Btw, параметр StatusMsg не используется postinstall записей. И я до сих пор не уверен, применимы ли для этой программы установщики Parameters.

+1

Спасибо .. это сработало для меня. – preethi

Смежные вопросы