1

innosetup を使用してインストーラー (myinstaller) を作成し、アプリケーション (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が先に進むことができるようにします。

ただし、ここで古いバージョンのアンインストール中に、アンインストールするかどうかをユーザーに尋ねます。その時点で、ユーザーが [OK] を押してアンインストールすると、正常に動作します。しかし、ユーザーが古いバージョンをアンインストールするために [キャンセル] を押すと、myinstallerを終了する必要があります。しかし、いずれにせよ True が返されるため、終了しません。

したがって、ユーザーがキャンセルボタンを押してアンインストールしたときにリターンコードを取得する必要があると思います。これにより、リターンコードを使用して true または false を返すことができます。

ユーザーがキャンセルを押してアンインストールしたときにリターンコードを取得する方法はありますか?

ShellExec('runas', 'rundll32.exe', 'dfshim.dll,ShArpMaintain SecretsUtility.application, Culture=neutral, PublicKeyToken=0000000000000000, processorArchitecture=amd64', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);  ?

それ以外の場合は、サイレント モードでアンインストールする方法を教えてください。パラメータが既に存在するため、 ShellExecで/SILENTパラメータを使用する方法について混乱しています。だから私に何かアイデアを提案してください。

4

1 に答える 1