InnoSetup: создание значков на общем/пользовательском рабочем столе на основе значений внутри установщика

Мы предоставляем пользовательскую страницу мастера в нашей конфигурации InnoSetup, которая дает нам переменную InstallForAllUsers. Основываясь на значении этой переменной, мы хотим разместить наши значки в соответствующих местах Common Desktop/Common Startup для всех пользователей и User Desktop/User Startup для текущего пользователя.

Наш раздел иконок выглядит так:

[Icons]
Name: "{group}\MyApp"; Filename: "{app}\MyApp.exe"; IconFilename: "{app}\MyApp.exe"
Name: "{group}\{cm:UninstallProgram,MyApp}"; Filename: "{uninstallexe}"; IconFilename: E:\Continuous Integration\InnoSetup Files\icon.ico
Name: "{commondesktop}\MyApp"; Filename: "{app}\MyApp.exe"; IconFilename: "{app}\MyApp.exe"
Name: "{commonstartup}\MyApp"; Filename: "{app}\MyApp.exe"; IconFilename:  "{app}\MyApp.exe"

Как я могу использовать свою переменную InstallForAllUsers для замены этих констант при необходимости?


person DTI-Matt    schedule 12.11.2013    source источник
comment
Посмотрите, например, на this post. Это должно быть применимо и к вашему случаю.   -  person TLama    schedule 13.11.2013
comment
Это именно то, что я сделал, так как я использовал аналогичную вещь для своих ключей реестра. Публикация ответа прямо сейчас. И все же спасибо за ссылку!   -  person DTI-Matt    schedule 13.11.2013
comment
Вообще говоря, лучше убрать этот выбор из пользовательского интерфейса, чем пытаться его реализовать. Изменение расположения значка не влияет на установку для пользователя или для машины.   -  person Miral    schedule 13.11.2013


Ответы (2)


Раздел иконок:

[Icons]    
Name: "{group}\MyApp"; Filename: "{app}\MyApp.exe"; IconFilename: "{app}\MyApp.exe"
Name: "{group}\{cm:UninstallProgram,MyApp}"; Filename: "{uninstallexe}"; IconFilename: E:\Continuous Integration\InnoSetup Files\icon.ico
Name: "{code:GetDesktopFolder}\MyApp"; Filename: "{app}\MyApp.exe"; IconFilename: "{app}\MyApp.exe"
Name: "{code:GetStartupFolder}\MyApp"; Filename: "{app}\MyApp.exe"; IconFilename:  "{app}\MyApp.exe"

Код:

function GetDesktopFolder(Param: String): String;
begin
  if (InstallAllUsers) then
    Result := ExpandConstant('{commondesktop}')
  else
    Result := ExpandConstant('{userdesktop}');
end;

function GetStartupFolder(Param: String): String;
begin
  if (InstallAllUsers) then
    Result := ExpandConstant('{commonstartup}')
  else
    Result := ExpandConstant('{userstartup}');
end;
person DTI-Matt    schedule 12.11.2013

Вы можете использовать функцию Check:, которая возвращает переменную «все пользователи», чтобы контролировать, создается ли значок или нет:

[Icons]
Name: "{commondesktop}\MyApp"; Filename: "{app}\MyApp.exe"; IconFilename: "{app}\MyApp.exe"; Check: Not CheckPerUserInstall;
Name: "{userdesktop}\MyApp"; Filename: "{app}\MyApp.exe"; IconFilename: "{app}\MyApp.exe"; Check: CheckPerUserInstall;
Name: "{commonstartup}\MyApp"; Filename: "{app}\MyApp.exe"; IconFilename:  "{app}\MyApp.exe"; Check: Not CheckPerUserInstall;
Name: "{userstartup}\MyApp"; Filename: "{app}\MyApp.exe"; IconFilename:  "{app}\MyApp.exe"; Check: CheckPerUserInstall;

[Code]
function CheckPerUserInstall(): Boolean;
begin
  Result := InstallForAllUsers;
end;

Обратите внимание, что константы {user*} вполне могут быть для пользователя, отличного от ожидаемого, если они запущены из учетной записи с ограниченными правами пользователя. Это основная причина, по которой установки «на пользователя» больше не так распространены.

person Deanna    schedule 13.11.2013