Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 9]

Ответить
Настройки темы
Скрипты Inno Setup. Помощь и советы [часть 9]

Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1271
Благодарности: 1029


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: El Sanchez
Дата: 06-06-2020
Внимание! Данная тема предназначена только для обсуждения написания скриптов!
Остальные вопросы, а также последние версии компилятора в теме
Inno Setup. Прочие вопросы.


Показать/скрыть: Справка, руководство, примеры:

Показать/скрыть: Ссылки на примеры скриптов:

Показать/скрыть: Дополнительные программы для Inno Setup:
  • ISTool - неплохой редактор скриптов Inno Setup.
    Последняя версия: 5.3.0.1 [29.09.2009] - Скачать | зеркало;

  • Inno Script Generator - генератор скриптов Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.
    Последняя версия: 1.0.3.1 [23.03.2008] - Скачать | зеркало на русифицированную программу;
    Примечание: Родной сайт www.hisoft2000.de более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup Form Designer - редактор страниц Inno Setup, можно создавать свои страницы.
    Последняя версия: 2.0.8 [12.11.2006] - Скачать;
    Примечание: Родной сайт http://isfd.kaju74.de/index.php?isfd более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup GameScript Generator - программа генерирует скрипты для Inno Setup . С помощью GameScript Generator и Inno Setup вы сможете быстро создать простенький инсталляционный пакет для любой игры. В инсталлятор можно встроить музыку, слайдшоу и фоновый рисунок. Для специалистов созданный скрипт, возможно, будет неплохой заготовкой для дальнейшей модернизации;

  • ISSkin - Программа для создания и добавления в инсталлятор скинов. Инструкция.
    Последняя версия: 3.0.0.0 [19.01.2010] - Скачать;

  • ISSJoiner - Программа для объединения нескольких скриптов InnoSetup в один.
    Последняя версия: 3.0 [23.07.2009]

  • Converter - Программа конвертирует reg-файлы в формат *.iss (формат скриптов Inno Setup).
    Последняя версия: 0.1.4 [13.03.2010] - Скачать;

  • RegExporter - Бесплатная утилита для экспорта реестра и конвертации файлов *.reg и *.ini в инсталляционные скрипты Inno Setup и NSIS.
    Последняя версия: 1.3.0 [17.01.2015] - Скачать;



Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:

Скрипты Inno Setup. Помощь и советы [часть 6] | Скрипты Inno Setup. Помощь и советы [часть 6].7z
Скрипты Inno Setup. Помощь и советы [часть 7] | Скрипты Inno Setup. Помощь и советы [часть 7].7z
Скрипты Inno Setup. Помощь и советы [часть 8] | Скрипты Inno Setup. Помощь и советы [часть 8].7z
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:09, 04-04-2018

 

Аватара для habib2302

Ветеран


Сообщения: 861
Благодарности: 102

Профиль | Отправить PM | Цитировать


Beavimo, вы этот код даже и не проверяли

-------
Помог? От "Полезное сообщение" не откажусь!!!


Отправлено: 14:45, 09-02-2020 | #541



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 73
Благодарности: 1

Профиль | Отправить PM | Цитировать


не работает он на 10-ке

Скрытый текст
Код: Выделить весь код
[Setup]
AppName=ICONKA
AppVerName=ICONKA
DefaultDirName=C:\ICONKA
OutputDir=userdocs:..\Desktop

[*Code]
function PinToTaskbar(const FileName: String; IsPin: Boolean): Boolean; var
    ShellApp: Variant;
    Verb: String;
  begin
    Result:=False;
      if not FileExists(FileName) then 
Exit; 
  try 
      if IsPin then
    Verb:='taskbarpin' 
  else
    Verb:='taskbarunpin';
    ShellApp:=CreateOleObject('Shell.Application');
    ShellApp.Windows.Item.Document.Application.NameSpace(ExtractFileDir(FileName)).ParseName(ExtractFileName(FileName)).InvokeVerb(Verb);
    Result:=True; 
  except 
    ShowExceptionMessage;
end
end;

procedure CurStepChanged(CurStep: TSetupStep);
  begin
      if CurStep=ssPostInstall then
  begin
    PinToTaskbar(ExpandConstant('{app}\ICONKA.exe'), True);
end
end;

[Files]
Source: "ICONKA.exe"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs


любой "ICONKA.exe" файл рядом положыте, на семерке без проблем а на десятке не робить
зато процедура "CurUninstallStepChanged" прекрасно работает даже на десятке

а это крепит ярлик в меню пуск и оно работает нормально
что на 7-ке что на 10-ке

Скрытый текст
Код: Выделить весь код
[Setup]
AppName=ICONKA
AppVerName=ICONKA
DefaultDirName=C:\ICONKA
OutputDir=userdocs:..\Desktop

[*Code]
function PinToStartMenu(const FileName: string; const IsPin: Boolean): Boolean; var
    ShellApp, FolderItem: Variant;
    Verb, LnkName: string;
  begin
    Result:=False;
      if not FileExists(FileName) then 
Exit;
  try
    ShellApp:=CreateOleObject('Shell.Application');
    FolderItem:=ShellApp.Windows.Item.Document.Application.NameSpace(ExtractFileDir(FileName)).ParseName(ExtractFileName(FileName));
      if GetWindowsVersion < $06020000 then
  begin
      if IsPin then
    Verb:='startpin' 
  else
    Verb:='startunpin';
    FolderItem.InvokeVerb(Verb);
    Result:=True;
end

  else begin
      if not FolderItem.IsLink then
  begin
    LnkName:=FolderItem.ExtendedProperty('FileDescription');
      if LnkName='' then
    LnkName:=ExtractFileName(FileName);
    LnkName:=ExpandConstant('{commonprograms}\') + ChangeFileExt(LnkName, '.lnk');
      if IsPin then
    Result:=not FileExists(LnkName) and
    FileExists(CreateShellLink(LnkName, '', FileName, '', '', '', 0, SW_SHOWNORMAL))
  else
    Result:=DeleteFile(LnkName);
end

  else begin
    LnkName:=ExpandConstant('{commonprograms}\') + ExtractFileName(FolderItem.Path);
      if IsPin then
    Result:=not FileExists(LnkName) and
    FileCopy(FolderItem.Path, LnkName, False)
  else
    Result:=DeleteFile(LnkName);
end
end;

  except
    ShowExceptionMessage;
end
end;

procedure CurStepChanged(CurStep: TSetupStep);
  begin
      if CurStep=ssPostInstall then
  begin
    PinToStartMenu(ExpandConstant('{app}\ICONKA.exe'), True);
end
end;

[Files]
Source: "ICONKA.exe"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

Последний раз редактировалось Beavimo, 09-02-2020 в 15:29.


Отправлено: 14:55, 09-02-2020 | #542


SHVtYW4=


Сообщения: 3451
Благодарности: 1273

Профиль | Отправить PM | Цитировать


Цитата Beavimo:
на десятке не робить »
Код: Выделить весь код
[CustomMessages]
CreateStartLaunchIcon=Добавить значок My Program в Меню пуск

[Tasks]
Name: startlaunchicon; Description: {cm:CreateStartLaunchIcon}; GroupDescription: {cm:AdditionalIcons}

[Files]
Source: C:\Program Files\Inno Setup 5\Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion

[UninstallDelete]
Name: {commonprograms}\My Program1; Type: filesandordirs; Tasks: startlaunchicon

[Icons]
Name: {commonprograms}\MyProgram1; Filename: {app}\MyProg.exe; Tasks: startlaunchicon
P.S "My Program1" - Отметил для различия.

-------
09a468a9b4293cd82adf6d6c60a9da82 | Tm9yZGVr
В связи со сменой железа и переходом на LInux с полным отказом от Windows - посещение на форуме будет редким.


Отправлено: 16:49, 09-02-2020 | #543


Пользователь


Сообщения: 73
Благодарности: 1

Профиль | Отправить PM | Цитировать


Nordek, мне нужно прикрепить значок на панель задач в Windows 10, я не могу понять как оно работает Process Monitor не помогает. ПАНЕЛЬ ЗАДАЧ...
Скрытый текст
Код: Выделить весь код
[Setup]
AppName=Taskbar1
AppVerName=Taskbar2
DefaultDirName=C:\Taskbar
OutputDir=userdocs:..\Desktop

[*Code]
function PinToTaskbar(const FileName: String; IsPin: Boolean): Boolean; var
    ShellApp: Variant;
    Verb: String;
  begin
    Result:=False;
      if not FileExists(FileName) then 
Exit; 
  try 
      if IsPin then
    Verb:='taskbarpin' 
  else
    Verb:='taskbarunpin';
    ShellApp:=CreateOleObject('Shell.Application');
    ShellApp.Windows.Item.Document.Application.NameSpace(ExtractFileDir(FileName)).ParseName(ExtractFileName(FileName)).InvokeVerb(Verb);
    Result:=True; 
  except 
    ShowExceptionMessage;
end
end;

procedure CurStepChanged(CurStep: TSetupStep);
  begin
   if CurStep=ssPostInstall then
  PinToTaskbar(ExpandConstant('{app}\Taskbar.exe'), True);
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
  begin
   if CurUninstallStep=usUninstall then
  PinToTaskbar(ExpandConstant('{app}\Taskbar.exe'), False);
end;

[Files]
Source: "Taskbar.exe"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

на 7-ке работает как надо, а на 10-ке тока открепить может если я вручную прикреплю иконку к панели задач то при диинсталляции она удалится.... а прикрепить ее окромя ручками у меня не выходит может я просто туплю уже 3-ю сутку не сплю

Отправлено: 18:07, 09-02-2020 | #544


Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1271
Благодарности: 1029

Профиль | Отправить PM | Цитировать


Цитата Beavimo:
я и говорю что не работает на 10-ке функция PinToTaskbar зато на 7-ке все хорошо... а вот PinToStartMenu работает прекрасно »
Beavimo, Microsoft считает, что закрепление ярлыка на Панели задач должен делать пользователь, а не приложение, и с каждой следующей сборкой что-нибудь да и отпиливают.
PinToTaskbar

Код: Выделить весь код
const
  CLSID_TaskbandPin = '{90AA3A4E-1CBA-4233-B8BB-535773D48449}';
  IID_IPinnedList2 = '{BBD20037-BC0E-42F1-913F-E2936BB0EA0C}';
  IID_IPinnedList3 = '{0DD79AE2-D156-45D4-9EEB-3B549769E940}';
  CLSCTX_INPROC_SERVER = 1;
  PLMC_EXPLORER = 4;
  S_OK = 0;

type
  PItemIDList = LongWord;

  IPinnedList2 = interface(IUnknown)
    '{BBD20037-BC0E-42F1-913F-E2936BB0EA0C}'
    procedure EnumObjects; // dummy
    function Modify(unpin, pin: PItemIDList): HRESULT;
    procedure GetChangeCount; // dummy
    procedure GetPinnableInfo; // dummy
    procedure IsPinnable; // dummy
    procedure Resolve; // dummy
    function IsPinned(pidl: PItemIDList): HRESULT;
    procedure GetPinnedItem; // dummy
    procedure GetPinnedItemForAppID; // dummy
    procedure ItemChangeNotify; // dummy
    procedure UpdateForRemovedItemsAsNecessary; // dummy
  end;

  IPinnedList3 = interface(IUnknown)
    '{0DD79AE2-D156-45D4-9EEB-3B549769E940}'
    procedure EnumObjects; // dummy
    procedure GetPinnableInfo; // dummy
    procedure IsPinnable; // dummy
    procedure Resolve; // dummy
    procedure LegacyModify; // dummy
    procedure GetChangeCount; // dummy
    function IsPinned(pidl: PItemIDList): HRESULT;
    procedure GetPinnedItem; // dummy
    procedure GetAppIDForPinnedItem; // dummy
    procedure ItemChangeNotify; // dummy
    procedure UpdateForRemovedItemsAsNecessary; // dummy
    procedure PinShellLink; // dummy
    procedure GetPinnedItemForAppID; // dummy
    function Modify(unpin, pin: PItemIDList; ModifyCaller: LongWord): HRESULT;
  end;

function CoCreateInstance(rclsid: TCLSID; pUnkOuter: LongWord;
  dwClsContext: DWORD; riid: TIID; out ppv: IUnknown): HRESULT; external 'CoCreateInstance@ole32.dll stdcall';
function ILCreateFromPath(const pszPath: string): PItemIDList; external 'ILCreateFromPathW@shell32.dll stdcall';
procedure ILFree(pidl: PItemIDList); external 'ILFree@shell32.dll stdcall';

function PinToTaskbar(const AFilename: string; AIsPin: Boolean): Boolean;
// AFilename : full path to executable file
// AIsPin....: False - unpin from TaskBar, True - pin to TaskBar
var
  LPIDL: PItemIDList;
  LUnk: IUnknown;
  LPinnedList2: IPinnedList2;
  LPinnedList3: IPinnedList3;
  LShellApp: Variant;
  LVerb: string;
begin
  Result := False;
  if FileExists(AFilename) and
    (GetWindowsVersion > $06010000) then
  try
    LPIDL := ILCreateFromPath(AFilename);
    try
      { Windows 10 (build 1809) and above. }
      OleCheck(CoCreateInstance(StringToGUID(CLSID_TaskbandPin), 0,
        CLSCTX_INPROC_SERVER, StringToGUID(IID_IPinnedList3), LUnk));
      LPinnedList3 := LUnk as IPinnedList3;
    except
      try
        { Windows 7, 8, 8.1 if IPinnedList2 supported. }
        OleCheck(CoCreateInstance(StringToGUID(CLSID_TaskbandPin), 0,
          CLSCTX_INPROC_SERVER, StringToGUID(IID_IPinnedList2), LUnk));
        LPinnedList2 := LUnk as IPinnedList2;
      except
        { Below Windows 10 (build 1809) fallback. }
        LShellApp := CreateOleObject('Shell.Application');
      end;
    end;
    if AIsPin then  // pin
    begin
      if LPinnedList3 <> nil then
      begin
        Result := LPinnedList3.IsPinned(LPIDL) <> S_OK;
        if Result then
          OleCheck(LPinnedList3.Modify(0, LPIDL, PLMC_EXPLORER));
      end
      else if LPinnedList2 <> nil then
      begin
        Result := LPinnedList2.IsPinned(LPIDL) <> S_OK;
        if Result then
          OleCheck(LPinnedList2.Modify(0, LPIDL));
      end else
        LVerb := 'taskbarpin';
    end else        // unpin
    begin
      if LPinnedList3 <> nil then
      begin
        Result := LPinnedList3.IsPinned(LPIDL) = S_OK;
        if Result then
          OleCheck(LPinnedList3.Modify(LPIDL, 0, PLMC_EXPLORER));
      end
      else if LPinnedList2 <> nil then
      begin
        Result := LPinnedList2.IsPinned(LPIDL) = S_OK;
        if Result then
          OleCheck(LPinnedList2.Modify(LPIDL, 0));
      end else
        LVerb := 'taskbarunpin';
    end;
    if LVerb <> '' then
      LShellApp.Windows.Item.Document.Application
        .NameSpace(ExtractFileDir(AFilename))
        .ParseName(ExtractFileName(AFilename)).InvokeVerb(LVerb);
  except
    Result := False;
    ShowExceptionMessage;
  finally
    ILFree(LPIDL);
  end;
end;

PinToStartMenu

Код: Выделить весь код
function PinToStartMenu(const AFilename: string; AIsPin: Boolean): Boolean;
// AFilename : full path to exe- or lnk-file
// AIsPin    : False - unpin from StartMenu, True - pin to StartMenu
var
  LShellApp, LFolderItem: Variant;
  LVerb, LnkName: string;
begin
  Result := False;
  if not FileExists(AFilename) then Exit;
  try
    LShellApp := CreateOleObject('Shell.Application');
    LFolderItem := LShellApp.Windows.Item.Document.Application
      .NameSpace(ExtractFileDir(AFilename))
      .ParseName(ExtractFileName(AFilename));
    { Below Windows 8. }
    if GetWindowsVersion < $06020000 then
    begin
      if AIsPin then
        LVerb := 'startpin' else
        LVerb := 'startunpin';
      LFolderItem.InvokeVerb(LVerb);
      Result := True;
    end else
    { Windows 8 and above. }
    begin
      if not LFolderItem.IsLink then
      begin
        LnkName := LFolderItem.ExtendedProperty('FileDescription');
        if LnkName = '' then
          LnkName := ExtractFileName(AFilename);
        LnkName := ExpandConstant('{commonprograms}\') + ChangeFileExt(LnkName, '.lnk');
        if AIsPin then
          Result := not FileExists(LnkName) and
            FileExists(CreateShellLink(LnkName, '', AFilename, '', '', '', 0, SW_SHOWNORMAL))
        else
          Result := DeleteFile(LnkName);
      end else
      begin
        LnkName := ExpandConstant('{commonprograms}\') + ExtractFileName(LFolderItem.Path);
        if AIsPin then
          Result := not FileExists(LnkName) and
            FileCopy(LFolderItem.Path, LnkName, False)
        else
          Result := DeleteFile(LnkName);
      end;
    end;
  except
    ShowExceptionMessage;
  end;
end;

Последний раз редактировалось El Sanchez, 06-06-2020 в 16:19. Причина: 16.02.20:fix; 06.06.20: add PinToStartMenu

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:19, 09-02-2020 | #545


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата El Sanchez:
Microsoft считает, что закрепление ярлыка на Панели задач должен делать пользователь, а не приложение, и с каждой следующей сборкой что-нибудь да и отпиливают. »
Слишком много приложений стали лепить себя на Панель задач (зачастую — молча). Примерно так же, как раньше каждое второе приложение считало своим долгом запихнуть свой значок в область уведомлений. Там нашли решение (кривое, понятно) в виде скрытия по умолчанию всех значков, кроме системных, на отдельную панель. А куда девать налепленные ярлыки с Панели задач — пока не решили.
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:40, 09-02-2020 | #546


Пользователь


Сообщения: 73
Благодарности: 1

Профиль | Отправить PM | Цитировать


1) так для справки я (трахну) ето ПИНО однозначно, не верю что не прикручю эту приблуду автоматом к панели на 10-ке, третьи сутки боя идут. 2) устанавливаю виндовс 10-ть раз в год уже 4-ый год подряд, пользуюсь примерно неделю-две, и возвращаюсь назад на 7-ку. решыл попробывать скачать образ 10-ки с оф сайта для тестирования своих наработок в ИННО на перспективной ОС - опирация прошла успешно, дата последнего обновления (09_01_2020) + онлайн ключики лежат на (philka.ru). 3) у меня на ПК стоит два ссд + винчестер. установил на второй зарание отформатированый ссд Windows 10 Pro. парни скажу чесно я будто обратно на хард пересел, а по сравнению с прошлогодней (08_01_2019) она стала еще больше походить все добро на одной полке, причем все в одном цвете хрен разбиреш что где, интуетивно нихера не понятно (нада учить всьо на изусть), короче бардак полнейшый. от душы лично мое мнение круче ХР по доступу к ресурсам я винды не встречал. а хто говорит мол 7-ка шлак, давно на 10-ке и не жалею, я просто промолчю (ДА ЗДРАВСТВУЕТ РЕКЛАМА в кожну хату)

Отправлено: 22:23, 09-02-2020 | #547


SHVtYW4=


Сообщения: 3451
Благодарности: 1273

Профиль | Отправить PM | Цитировать


Цитата Iska:
Слишком много приложений стали лепить себя на Панель задач (зачастую — молча). »
Всегда раздражало и раздражает такое ненужное явление.


Цитата Beavimo:
лично мое мнение круче ХР по доступу к ресурсам я винды не встречал. »
Потому и безопасности никакой.

Кстати начиная с 6.0.0-beta:
  • OS requirements change: Windows 2000, XP, and Server 2003 are no longer supported. Windows Vista is now the minimum supported operating system.
- В том числе и созданные инсталляторы.

-------
09a468a9b4293cd82adf6d6c60a9da82 | Tm9yZGVr
В связи со сменой железа и переходом на LInux с полным отказом от Windows - посещение на форуме будет редким.


Отправлено: 23:56, 09-02-2020 | #548


Пользователь


Сообщения: 73
Благодарности: 1

Профиль | Отправить PM | Цитировать


Nordek, да я не собырался на автомате ярлык лепить, просто код старался упрость для понимания. а так меня всегда раздажали картинки из игр в ирталлерах, заставки перед запуском, путь для игры с именем репакера или папка в меню пуск с его именем, установка софта поверх уже установленого .... короче кучя дерьма сжатия до придела что уснуть при установке можна, лутше время потратить на коректное извлечение ключей и путей из оригинального дистрибутива, чем ети репаки с музыкой и прочей лабудой клепать. а тут ярлык бог сека открепил и все

Nordek, ладно дружыще я просто немного ни в сибе третью сутку без сна, если что не так в правописании я со Львова, Руского никогда не изучал

Отправлено: 00:22, 10-02-2020 | #549


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Beavimo:
а так меня всегда раздажали картинки из игр в ирталлерах, заставки перед запуском, путь для игры с именем репакера или папка в меню пуск с его именем, установка софта поверх уже установленого .... короче кучя дерьма »
А сами хотите лепить то же самое, а ? Коллега, как это понимать?

Отправлено: 00:38, 10-02-2020 | #550



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 9]

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 7] El Sanchez Автоматическая установка приложений 2499 02-02-2015 08:59
Скрипты Inno Setup. Помощь и советы [часть 6] El Sanchez Автоматическая установка приложений 2494 10-03-2014 11:51
Скрипты Inno Setup. Помощь и советы [часть 5] El Sanchez Автоматическая установка приложений 1999 28-03-2013 19:09
Скрипты Inno Setup. Помощь и советы [часть 4] El Sanchez Автоматическая установка приложений 2099 22-05-2012 23:16
Скрипты Inno Setup. Помощь и советы [часть 3] Serega Автоматическая установка приложений 3755 26-10-2011 17:58




 
Переход