21

ソフトウェア (これは C# ソフトウェアです) の Inno セットアップを構成しようとしています。ソフトウェアの多くのバージョンをリリースする予定です。アプリケーションの古いバージョンがコンピューターに既にインストールされている場合、Inno セットアップ インストーラー インターフェイスを変更したいと考えています。この場合、ユーザーはインストール ディレクトリを変更できません。

次の 4 つのケースがあります。

最初のケース: これは私の製品の最初のインストールであり、Inno のセットアップは正常に進行するはずです。

2 番目のケース: 製品が既にインストールされていて、インストーラーに新しいバージョンが含まれている場合。ユーザーは宛先フォルダーを選択できません。彼は更新を実行するだけです。

3 番目のケース: インストールされているバージョンよりも古いバージョンがインストーラーに含まれている場合、更新は無効になり、メッセージが表示されます。

4 番目のケース: インストーラーのバージョンが、インストールされているバージョンと同じです。ユーザーは、必要に応じて実際のバージョンを修復できます。

InnoSetupでそれを行うことは可能ですか?

4

2 に答える 2

12

Inno Setup は、ケース 1、2、および 4AppIDを、アプリケーションの存続期間中同じに保たれている場合、自動的に処理します。次のディレクティブ
を使用して、ディレクトリとグループのページを非表示にすることもできます。[Setup]

DisableDirPage=auto
DisableGroupPage=auto

詳細については、このISXKB の記事を参照してください。

ケース 3 の場合、ファイルが正しくバージョン管理されていると仮定すると、Inno は何もダウングレードしませんが、実際にはユーザーに警告しません。これを行うには、これをチェックするコードを追加する必要があります。ほとんどの場合、InitializeSetup()イベント関数に追加します。

于 2013-03-26T14:05:22.523 に答える
10

ユーザーへのフィードバックが必要な場合は、そのようなことを試すことができます。まず、アップデートはAppIdメイン アプリと同じ名前にする必要があります。次に、状態についてユーザーに通知するメッセージを表示するいくつかのチェックを設定できます。

#define MyAppVersion "1.2.2.7570"
#define MyAppName "MyApp Update"

[Setup]
AppId=MyApp
AppName={#MyAppName}
AppVersion={#MyAppVersion}
DefaultDirName={reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MyApp_is1,InstallLocation}
DisableDirPage=True

[CustomMessages]
MyAppOld=The Setup detected application version 
MyAppRequired=The installation of {#MyAppName} requires MyApp to be installed.%nInstall MyApp before installing this update.%n%n
MyAppTerminated=The setup of update will be terminated.

[Code]
var
InstallLocation: String;

function GetInstallString(): String;
var
InstPath: String;
InstallString: String;
begin
InstPath := ExpandConstant('Software\Microsoft\Windows\CurrentVersion\Uninstall\MyApp_is1');
InstallString := '';
if not RegQueryStringValue(HKLM, InstPath, 'InstallLocation', InstallString) then
RegQueryStringValue(HKCU, InstPath, 'InstallLocation', InstallString);
Result := InstallString;
InstallLocation := InstallString;
end;

function InitializeSetup: Boolean;
var
V: Integer;
sUnInstallString: String;
Version: String;
begin
    if RegValueExists(HKEY_LOCAL_MACHINE,'Software\Microsoft\Windows\CurrentVersion\Uninstall\MyApp_is1', 'UninstallString') then begin
      RegQueryStringValue(HKEY_LOCAL_MACHINE,'Software\Microsoft\Windows\CurrentVersion\Uninstall\MyApp_is1', 'DisplayVersion', Version);
      if Version =< ExpandConstant('{#MyAppVersion}') then begin 
          Result := True;
          GetInstallString();
       end
       else begin
MsgBox(ExpandConstant('{cm:MyAppOld}'+Version+'.'+#13#10#13#10+'{cm:MyAppRequired}'+'{cm:MyAppTerminated}'), mbInformation, MB_OK);
         Result := False;
  end;
end
else begin
  MsgBox(ExpandConstant('{cm:MyAppRequired}'+'{cm:MyAppTerminated}'), mbInformation, MB_OK);
  Result := False;
end;
end;
于 2013-03-26T14:09:14.513 に答える