ユーザーがすべてのユーザーにインストールすることを選択したか、現在のユーザーのみにインストールすることを選択したかに応じて、異なるフォルダーにファイルをインストールしたいと考えています。
CreateInputOptionPage() を追加して、2 つのラジオ ボタンを持つオプション ページを作成しました。
ただし、私のインストーラーには、次の 2 つのような多くの重複行が散らばっています。
Source: {#ProjectRootFolder}\License.txt; DestDir: {userdocs}\{#MyAppName}; Check: NOT IsAllUsers
Source: {#ProjectRootFolder}\License.txt; DestDir: {commondocs}\{#MyAppName}; Check:IsAllUsers
上記を行うよりエレガントな方法はありますか?たとえば、Pascal コードで #define のように変数を作成して、上記の {userdocs} と {commondocs} の代わりに使用できますか?
詳細:
上記の IsAllUsers() 関数は、次のコードを呼び出します。
function IsAllUsers: Boolean;
begin
#ifdef UPDATE
Result := AllUsersInRegistryIsTRUE;
#else
Result := AllUsersOrCurrentUserPage.Values[1]; // wizard page second radio button
#endif
end;
と:
function AllUsersInRegistryIsTRUE: Boolean; // True if preceding install was to all users' documents
var
AllUsersRegValue: AnsiString;
begin
if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software\MyApp', 'AllUsers', AllUsersRegValue) then
Result := (UpperCase(AllUsersRegValue) = 'YES')
else
Result := FALSE;
end;