Я создал установщик (myinstaller), используя innosetup для установки приложения (myapp). Фрагмент кода:
function legacy_check(): Boolean;
begin
ShellExec('runas', 'rundll32.exe', 'dfshim.dll,ShArpMaintain SecretsUtility.application, Culture=neutral, PublicKeyToken=0000000000000000, processorArchitecture=amd64', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);
Result := True;
end;
function InitializeSetup(): Boolean;
begin
Result:=legacy_check(); // after this line only inno setup wizard page will appear
// code to install latest version
end;
Здесь функция legacy_check() проверяет наличие старой версии myapp в системе, удаляет ее и возвращает значение true . чтобы myinstaller мог продолжить работу.
Но здесь при удалении старой версии он спрашивает пользователя, удалять или нет. В этот раз, если пользователь нажимает «ОК» для удаления, все работает нормально. Но если пользователь нажимает «Отмена», чтобы удалить старую версию, он должен завершить работу myinstaller. Но это не завершение, поскольку он все равно возвращает True.
Поэтому я думаю, что мне нужно получить код возврата, когда пользователь нажимает кнопку отмены для удаления, чтобы с помощью кода возврата я мог вернуть либо true, либо false.
Итак, есть ли способ получить код возврата, когда пользователь нажимает «Отмена» для удаления, чтобы я мог использовать его после строки,
ShellExec('runas', 'rundll32.exe', 'dfshim.dll,ShArpMaintain SecretsUtility.application, Culture=neutral, PublicKeyToken=0000000000000000, processorArchitecture=amd64', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode); ?
в противном случае, пожалуйста, скажите мне, как удалить его молча. Я не понимаю, как использовать параметр /SILENT в ShellExec, поскольку параметры уже присутствуют. Поэтому, пожалуйста, предложите мне какую-нибудь идею.
quite recently
. Вы столкнулись с еще одной проблемой: вы не сможете определить, что пользователь отменил программу удаления ClickOnce, потому что rundll32.exe не вернет ничего, кроме 0, поэтому нет возможности получить обратную связь от выполняемой библиотечной функции. . Если вы можете определить, установлено ли приложение ClickOnce, я бы сделал это снова после возврата вашей функцииlegacy_check
. - person TLama   schedule 10.10.2014ShellExec
вызова функции, от этого ClickOnce чего-то. Поэтому, если вы спрашиваете, можете ли вы определить, нажал ли пользователь кнопку отмены в этом деинсталляторе ClickOnce, то нет, это невозможно (если вы не будете взаимодействовать с этим деинсталлятором ClickOnce иначе, чем вызовом rundll32.exe). - person TLama   schedule 10.10.2014rundll32.exe dfshim.dll,ShArpMaintain...
, не имеет ничего общего с Inno Setup. Inno Setup создает двоичные файлы деинсталлятора, такие как, например. unins000.exe. - person TLama   schedule 10.10.2014