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

Ответить
 • Просмотры: 20
Аватара пользователя
vadjliss

Re: Скрипты Inno Setup. Помощь и советы [часть 8]

Сообщение vadjliss »

Цитата Stealthmax:



Wow6432Node
Скрипты Inno Setup. Помощь и советы [часть 8]




Stealthmax, это тоже ошибка. Нельзя прямо указывать Wow6432Node. Категорически.


Цитата El Sanchez:



может оказаться, что на 64-разрядной системе CLSID находится не только в 64-разрядной ветке реестра, но и в 32-разрядной.
Скрипты Inno Setup. Помощь и советы [часть 8]




Stealthmax, я про то, что данный CLSID находится в 2-х местах, с помощью GetHKLM на 64-разрядной системе запись будет произведена только в 64-разрядную ветку реестра. Всего-то нужно на 64-разрядной системе для данного CLSID RegWriteBinaryValue вызвать 2 раза: RegWriteBinaryValue(HKLM, 'SOFTWARE\Classes\...') - запись пойдет в 32-разрядную ветку, RegWriteBinaryValue(HKLM64, 'SOFTWARE\Classes\...') - запись пойдет в 64-разрядную ветку.
Аватара пользователя
Dodakaedr

Re: Скрипты Inno Setup. Помощь и советы [часть 8]

Сообщение Dodakaedr »

Цитата El Sanchez:



Всего-то нужно на 64-разрядной системе для данного CLSID RegWriteBinaryValue вызвать 2
Скрипты Inno Setup. Помощь и советы [часть 8]




Т.е. в случае, если запуск будет выполнен на 32-разрядной ОСи, то отработает ключ,
Цитата El Sanchez:



RegWriteBinaryValue(HKLM, 'SOFTWARE\Classes\...')
Скрипты Inno Setup. Помощь и советы [часть 8]




а HKLM64 будет пропущен ввиду отсутствия, верно?
Аватара пользователя
vadjliss

Re: Скрипты Inno Setup. Помощь и советы [часть 8]

Сообщение vadjliss »

спасибо Dodakaedr

но мне нужно чтобы portable распаковывала свою папку которая будет в инстоляторе

а здесь



Код:

Код: Выделить всё

 [Files]
Source: "ваша папка\*"; DestDir: "{app}"; Check: "not IsChecked"; Flags: ignoreversion createallsubdirs recursesubdirs

она распаковывает другую папку и инстолятора в одну

короче надо что бы portable не трогала папку инстолятора

вот мой код



скрипт

[spoiler]

Код: Выделить всё

#define MyAppName "Icecream PDF Converter"

#define MyAppExeName "pdfconverter.exe"

[Setup]

AppName=My Program

AppVerName=My Program

DefaultDirName={pf}\My Program

OutputDir=.

SetupIconFile=C:\Users\111\Desktop\скрипт\image\1.ico

Uninstallable=IsChecked

CreateUninstallRegKey=IsChecked



[Languages]

Name: ru; MessagesFile: compiler:Languages\Russian.isl;



[Tasks]

Name: "desktopicon"; Description: "Ярлык(и) на «Рабочем столе»"; GroupDescription: "Дополнительно:"; Check: IsChecked



[Icons]

Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Tasks: desktopicon

[Files]

Source: C:\Users\111\Desktop\Новая папка\ProgramFilesFolder\Icecream PDF Converter\pdfconverter.exe; DestDir: {app}; Flags: ignoreversion

Source: C:\Users\111\Desktop\Новая папка\WindowsFolder\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs

Source: "C:\Users\111\Desktop\Новая папка\DesktopFolder\*"; DestDir: "{app}"; Check: "not IsChecked"; Flags: ignoreversion createallsubdirs recursesubdirs



[CustomMessages]

HeaderLabelPage=Выбор типа установки

LabelPage=Выберите нужный тип установки

MyRadioCaption_1=Распаковка

MyRadioCaption_2=Обычная установка

PageTextHeader=На этой странице Вы можете выбрать тип установки, который для Вас наиболее удобен.

MyText_1=Будет произведена распаковка в паку,%nуказанную на следующей странице

MyText_2=Будет произведена стандартная установка

Extracted=Распаковка — %1

ExtractedFolder=Выбор папки распаковки

ExtractedFolder2=В какую папку вы хотите распаковать %1?

ExtractedFolder3=Программа распакует %1 в следующую папку.

ExtractedFolder4=Программа установит %1 в следующую папку.

Installing=Распаковка...

InstallingLabel=Пожалуйста, подождите, пока %1 распакуется на ваш компьютер.

FinishedHeadingLabel=Завершение распаковки%n%1

FinishedLabelNoIcons=Программа %1 распакована на Ваш компьютер.%n%nНажмите «Завершить», чтобы выйти из программы распаковки.



[UninstallDelete]

Type: filesandordirs; Name: {app}



[code]

const

  DI_NORMAL = 3;



var

  MyNewPage: TWizardPage;

  Rect: TRect;

  HIcon: LongInt;

  AIconFileName: String;

  MyRadioBtn_1, MyRadioBtn_2: TNewRadioButton;



function GetModuleHandle(lpModuleName: LongInt): LongInt; external 'GetModuleHandleA@kernel32.dll stdcall';

function ExtractIcon(hInst: LongInt; lpszExeFileName: AnsiString; nIconIndex: LongInt): LongInt; external 'ExtractIconA@shell32.dll stdcall';

function DrawIconEx(hdc: LongInt; xLeft, yTop: Integer; hIcon: LongInt; cxWidth, cyWidth: Integer; istepIfAniCur: LongInt; hbrFlickerFreeDraw, diFlags: LongInt): LongInt;external 'DrawIconEx@user32.dll stdcall';

function DestroyIcon(hIcon: LongInt): LongInt; external 'DestroyIcon@user32.dll stdcall';



function IsChecked: Boolean;

begin

  Result:= MyRadioBtn_2.checked;

end;



procedure RadBtnOnClick(Sender: TObject);

begin

  case Sender of

    MyRadioBtn_1: begin

      WizardForm.Caption:= FmtMessage(ExpandConstant('{cm:Extracted}'), [ExpandConstant('{#SetupSetting("AppName")}')]);

      WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder3}'), [ExpandConstant('{#SetupSetting("AppName")}')]);

    end;

    MyRadioBtn_2: begin

      WizardForm.Caption:= FmtMessage(SetupMessage(msgSetupWindowTitle), [ExpandConstant('{#SetupSetting("AppName")}')]);

      WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder4}'), [ExpandConstant('{#SetupSetting("AppName")}')]);

    end;

  end;

end;



procedure GetInstTypePage();

begin

  MyNewPage:= CreateCustomPage(wpWelcome, ExpandConstant('{cm:HeaderLabelPage}'), ExpandConstant('{cm:LabelPage}'));



  try

    // в конкретном примере из этого файла (C:\Windows\System32\shell32.dll) берём иконки, для пробного показа.

    // Можно использовать обычные .ico

    AIconFileName:= ExpandConstant('{sys}\shell32.dll');

    //



    Rect.Left:= 0;

    Rect.Top:= 0;

    Rect.Right:= 32;

    Rect.Bottom:= 32;



    hIcon:= ExtractIcon(GetModuleHandle(0), AIconFileName, 26);

    try

      with TBitmapImage.Create(WizardForm) do begin

        Left:= ScaleX(15);

        Top:= ScaleY(68);

        Width:= 32;

        Height:= 32;

        with Bitmap do begin

          Width:= 32;

          Height:= 32;

          Canvas.Brush.Color:= clBtnFace;

          Canvas.FillRect(Rect);

          DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, DI_NORMAL);

        end;

        Parent:= MyNewPage.Surface;

      end;

     finally

     DestroyIcon(hIcon);

    end;



    hIcon:= ExtractIcon(GetModuleHandle(0), AIconFileName, 19);

    try

      with TBitmapImage.Create(WizardForm) do begin

        Left:= ScaleX(15);

        Top:= ScaleY(138);

        Width:= 32;

        Height:= 32;

        with Bitmap do begin

          Width:= 32;

          Height:= 32;

          Canvas.Brush.Color:= clBtnFace;

          Canvas.FillRect(Rect);

          DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, DI_NORMAL);

        end;

        Parent:= MyNewPage.Surface;

      end;

     finally

     DestroyIcon(hIcon);

    end;

   except

  end;                                                      



  with TNewStaticText.Create(WizardForm) do begin

    Width:= WizardForm.InnerNotebook.Width;

    Height:= ScaleY(26);

    WordWrap:= True;

    Caption:= ExpandConstant('{cm:PageTextHeader}');

    Parent:= MyNewPage.Surface;

  end;



  MyRadioBtn_1:= TNewRadioButton.Create(WizardForm);

  with MyRadioBtn_1 do begin

    Top:= ScaleY(50);

    Width:= ScaleX(150);

    Caption:= ExpandConstant('{cm:MyRadioCaption_1}');

    OnClick:= @RadBtnOnClick;

    Parent:= MyNewPage.Surface;

  end;



  with TNewStaticText.Create(WizardForm) do begin

    Left:= ScaleX(60);

    Top:= ScaleY(68);

    Width:= WizardForm.InnerNotebook.Width - ScaleX(60);

    Height:= ScaleY(26);

    WordWrap:= True;

    Caption:= ExpandConstant('{cm:MyText_1}');

    Parent:= MyNewPage.Surface;

  end;



  MyRadioBtn_2:= TNewRadioButton.Create(WizardForm);

  with MyRadioBtn_2 do begin

    Top:= ScaleY(120);

    Width:= ScaleX(150);

    Caption:= ExpandConstant('{cm:MyRadioCaption_2}');

    Checked:= True;

    OnClick:= @RadBtnOnClick;

    Parent:= MyNewPage.Surface;

  end;



  with TNewStaticText.Create(WizardForm) do begin

    Left:= ScaleX(60);

    Top:= ScaleY(138);

    Width:= WizardForm.InnerNotebook.Width - ScaleX(60);

    Height:= ScaleY(26);

    WordWrap:= True;

    Caption:= ExpandConstant('{cm:MyText_2}');

    Parent:= MyNewPage.Surface;

  end;

end;                                                            



function ShouldSkipPage(PageID: Integer): Boolean;

begin

  if (PageID > wpSelectDir) and (PageID < wpInstalling) and (MyRadioBtn_1.Checked) then

     Result:= True;

end;                                     



procedure InitializeWizard();

begin

  GetInstTypePage();

  WizardForm.DiskSpaceLabel.Hide;

end;



procedure CurPageChanged(CurPageID: Integer);

begin

  if not IsChecked then begin

    case CurPageID of

      wpSelectDir: begin

	WizardForm.Caption:= FmtMessage(ExpandConstant('{cm:Extracted}'), [ExpandConstant('{#SetupSetting("AppName")}')]);

	WizardForm.PageNameLabel.Caption:= ExpandConstant('{cm:ExtractedFolder}');

	WizardForm.PageDescriptionLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder2}'), [ExpandConstant('{#SetupSetting("AppName")}')]);

	WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder3}'), [ExpandConstant('{#SetupSetting("AppName")}')]);

  if IsChecked then

    WizardForm.DirEdit.Text := ExpandConstant( '{pf}\{#SetupSetting("AppName")}' ) else

    WizardForm.DirEdit.Text := ExpandConstant( '{src}\{#SetupSetting("AppName")}' );

      end;

      wpInstalling: begin

	WizardForm.PageNameLabel.Caption:= ExpandConstant('{cm:Installing}');

	WizardForm.PageDescriptionLabel.Caption:= FmtMessage(ExpandConstant('{cm:InstallingLabel}'), [ExpandConstant('{#SetupSetting("AppName")}')]);

      end;

      wpFinished: begin

	WizardForm.FinishedHeadingLabel.Caption:= FmtMessage(ExpandConstant('{cm:FinishedHeadingLabel}'), [ExpandConstant('{#SetupSetting("AppName")}')]);

	WizardForm.FinishedLabel.Caption:= FmtMessage(ExpandConstant('{cm:FinishedLabelNoIcons}'), [ExpandConstant('{#SetupSetting("AppName")}')]);

      end;

    end;

  end;

end;[/spoiler]
                
                                           
            

извините но очень нужно
Аватара пользователя
Dodakaedr

Re: Скрипты Inno Setup. Помощь и советы [часть 8]

Сообщение Dodakaedr »

почему текст при нажатии "обводится" пунктиром каким то ? в скрипте только VclStylesinno, ни чего нет, чек бокс не через ботву
Аватара пользователя
vadjliss

Re: Скрипты Inno Setup. Помощь и советы [часть 8]

Сообщение vadjliss »

да и ещё не могу понять как поменять иконки на свой



Скрытый текст

[spoiler][Setup]

AppName=My Program

AppVerName=My Program

DefaultDirName={pf}\My Program

OutputDir=.

Uninstallable=IsChecked

CreateUninstallRegKey=IsChecked



[Languages]

Name: ru; MessagesFile: compiler:Languages\Russian.isl;



[Tasks]

; Дополнительно

; Ярлык(и) на «Рабочем столе»

Name: "desktopicon"; Description: "Ярлык(и) на «Рабочем столе»"; GroupDescription: "Дополнительно:"; Check: IsChecked

; Ярлыки в меню «Пуск»

Name: "starticon"; Description: "Ярлыки в меню «Пуск»"; GroupDescription: "Дополнительно:"; Check: IsChecked



[Icons]

Name: "{group}\My Program"; Filename: "{uninstallexe}"; Tasks: starticon; Check: not IsChecked

Name: "{commondesktop}\My Program"; Filename: "{uninstallexe}"; Tasks: desktopicon; Check: IsChecked



[Files]

; Файлы для проверки и демонстрации. При реальном использовании - закомментировать или удалить!

Source: {win}\Help\*; DestDir: {app}; Flags: external recursesubdirs



[CustomMessages]

HeaderLabelPage=Выбор типа установки

LabelPage=Выберите нужный тип установки

MyRadioCaption_1=Распаковка

MyRadioCaption_2=Обычная установка

PageTextHeader=На этой странице Вы можете выбрать тип установки, который для Вас наиболее удобен.

MyText_1=Будет произведена распаковка в паку,%nуказанную на следующей странице

MyText_2=Будет произведена стандартная установка

Extracted=Распаковка — %1

ExtractedFolder=Выбор папки распаковки

ExtractedFolder2=В какую папку вы хотите распаковать %1?

ExtractedFolder3=Программа распакует %1 в следующую папку.

ExtractedFolder4=Программа установит %1 в следующую папку.

Installing=Распаковка...

InstallingLabel=Пожалуйста, подождите, пока %1 распакуется на ваш компьютер.

FinishedHeadingLabel=Завершение распаковки%n%1

FinishedLabelNoIcons=Программа %1 распакована на Ваш компьютер.%n%nНажмите «Завершить», чтобы выйти из программы распаковки.



[UninstallDelete]

Type: filesandordirs; Name: {app}


Код: Выделить всё


const

  DI_NORMAL = 3;



var

  MyNewPage: TWizardPage;

  Rect: TRect;

  HIcon: LongInt;

  AIconFileName: String;

  MyRadioBtn_1, MyRadioBtn_2: TNewRadioButton;



function GetModuleHandle(lpModuleName: LongInt): LongInt; external 'GetModuleHandleA@kernel32.dll stdcall';

function ExtractIcon(hInst: LongInt; lpszExeFileName: AnsiString; nIconIndex: LongInt): LongInt; external 'ExtractIconA@shell32.dll stdcall';

function DrawIconEx(hdc: LongInt; xLeft, yTop: Integer; hIcon: LongInt; cxWidth, cyWidth: Integer; istepIfAniCur: LongInt; hbrFlickerFreeDraw, diFlags: LongInt): LongInt;external 'DrawIconEx@user32.dll stdcall';

function DestroyIcon(hIcon: LongInt): LongInt; external 'DestroyIcon@user32.dll stdcall';



function IsChecked: Boolean;

begin

  Result:= MyRadioBtn_2.checked;

end;



procedure RadBtnOnClick(Sender: TObject);

begin

  case Sender of

    MyRadioBtn_1: begin

      WizardForm.Caption:= FmtMessage(ExpandConstant('{cm:Extracted}'), [ExpandConstant('{#SetupSetting("AppName")}')]);

      WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder3}'), [ExpandConstant('{#SetupSetting("AppName")}')]);

    end;

    MyRadioBtn_2: begin

      WizardForm.Caption:= FmtMessage(SetupMessage(msgSetupWindowTitle), [ExpandConstant('{#SetupSetting("AppName")}')]);

      WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder4}'), [ExpandConstant('{#SetupSetting("AppName")}')]);

    end;

  end;

end;



procedure GetInstTypePage();

begin

  MyNewPage:= CreateCustomPage(wpWelcome, ExpandConstant('{cm:HeaderLabelPage}'), ExpandConstant('{cm:LabelPage}'));



  try

    // в конкретном примере из этого файла (C:\Windows\System32\shell32.dll) берём иконки, для пробного показа.

    // Можно использовать обычные .ico

    AIconFileName:= ExpandConstant('{sys}\shell32.dll');

    //



    Rect.Left:= 0;

    Rect.Top:= 0;

    Rect.Right:= 32;

    Rect.Bottom:= 32;



    hIcon:= ExtractIcon(GetModuleHandle(0), AIconFileName, 26);

    try

      with TBitmapImage.Create(WizardForm) do begin

        Left:= ScaleX(15);

        Top:= ScaleY(68);

        Width:= 32;

        Height:= 32;

        with Bitmap do begin

          Width:= 32;

          Height:= 32;

          Canvas.Brush.Color:= clBtnFace;

          Canvas.FillRect(Rect);

          DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, DI_NORMAL);

        end;

        Parent:= MyNewPage.Surface;

      end;

     finally

     DestroyIcon(hIcon);

    end;



    hIcon:= ExtractIcon(GetModuleHandle(0), AIconFileName, 19);

    try

      with TBitmapImage.Create(WizardForm) do begin

        Left:= ScaleX(15);

        Top:= ScaleY(138);

        Width:= 32;

        Height:= 32;

        with Bitmap do begin

          Width:= 32;

          Height:= 32;

          Canvas.Brush.Color:= clBtnFace;

          Canvas.FillRect(Rect);

          DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, DI_NORMAL);

        end;

        Parent:= MyNewPage.Surface;

      end;

     finally

     DestroyIcon(hIcon);

    end;

   except

  end;



  with TNewStaticText.Create(WizardForm) do begin

    Width:= WizardForm.InnerNotebook.Width;

    Height:= ScaleY(26);

    WordWrap:= True;

    Caption:= ExpandConstant('{cm:PageTextHeader}');

    Parent:= MyNewPage.Surface;

  end;



  MyRadioBtn_1:= TNewRadioButton.Create(WizardForm);

  with MyRadioBtn_1 do begin

    Top:= ScaleY(50);

    Width:= ScaleX(150);

    Caption:= ExpandConstant('{cm:MyRadioCaption_1}');

    OnClick:= @RadBtnOnClick;

    Parent:= MyNewPage.Surface;

  end;



  with TNewStaticText.Create(WizardForm) do begin

    Left:= ScaleX(60);

    Top:= ScaleY(68);

    Width:= WizardForm.InnerNotebook.Width - ScaleX(60);

    Height:= ScaleY(26);

    WordWrap:= True;

    Caption:= ExpandConstant('{cm:MyText_1}');

    Parent:= MyNewPage.Surface;

  end;



  MyRadioBtn_2:= TNewRadioButton.Create(WizardForm);

  with MyRadioBtn_2 do begin

    Top:= ScaleY(120);

    Width:= ScaleX(150);

    Caption:= ExpandConstant('{cm:MyRadioCaption_2}');

    Checked:= True;

    OnClick:= @RadBtnOnClick;

    Parent:= MyNewPage.Surface;

  end;



  with TNewStaticText.Create(WizardForm) do begin

    Left:= ScaleX(60);

    Top:= ScaleY(138);

    Width:= WizardForm.InnerNotebook.Width - ScaleX(60);

    Height:= ScaleY(26);

    WordWrap:= True;

    Caption:= ExpandConstant('{cm:MyText_2}');

    Parent:= MyNewPage.Surface;

  end;

end;



function ShouldSkipPage(PageID: Integer): Boolean;

begin

  if (PageID > wpSelectDir) and (PageID < wpInstalling) and (MyRadioBtn_1.Checked) then

     Result:= True;

end;



procedure InitializeWizard();

begin

  GetInstTypePage();

  WizardForm.DiskSpaceLabel.Hide;

end;



procedure CurPageChanged(CurPageID: Integer);

begin

  if not IsChecked then begin

    case CurPageID of

      wpSelectDir: begin

	WizardForm.Caption:= FmtMessage(ExpandConstant('{cm:Extracted}'), [ExpandConstant('{#SetupSetting("AppName")}')]);

	WizardForm.PageNameLabel.Caption:= ExpandConstant('{cm:ExtractedFolder}');

	WizardForm.PageDescriptionLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder2}'), [ExpandConstant('{#SetupSetting("AppName")}')]);

	WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder3}'), [ExpandConstant('{#SetupSetting("AppName")}')]);

  if IsChecked then

    WizardForm.DirEdit.Text := ExpandConstant( '{pf}\{#SetupSetting("AppName")}' ) else

    WizardForm.DirEdit.Text := ExpandConstant( '{src}\{#SetupSetting("AppName")}' );

      end;

      wpInstalling: begin

	WizardForm.PageNameLabel.Caption:= ExpandConstant('{cm:Installing}');

	WizardForm.PageDescriptionLabel.Caption:= FmtMessage(ExpandConstant('{cm:InstallingLabel}'), [ExpandConstant('{#SetupSetting("AppName")}')]);

      end;

      wpFinished: begin

	WizardForm.FinishedHeadingLabel.Caption:= FmtMessage(ExpandConstant('{cm:FinishedHeadingLabel}'), [ExpandConstant('{#SetupSetting("AppName")}')]);

	WizardForm.FinishedLabel.Caption:= FmtMessage(ExpandConstant('{cm:FinishedLabelNoIcons}'), [ExpandConstant('{#SetupSetting("AppName")}')]);

      end;

    end;

  end;

end;[/spoiler]
Аватара пользователя
us_ov

Re: Скрипты Inno Setup. Помощь и советы [часть 8]

Сообщение us_ov »

Цитата audiofeel:



почему текст при нажатии "обводится" пунктиром каким то?
Скрипты Inno Setup. Помощь и советы [часть 8]




Решил вопрос с этим, а то меня тоже интересует данный факт.
Аватара пользователя
habib2302

Re: Скрипты Inno Setup. Помощь и советы [часть 8]

Сообщение habib2302 »

Цитата Respin:



Решил вопрос с этим, а то меня тоже интересует данный факт.
Скрипты Inno Setup. Помощь и советы [часть 8]




нет, видимо особенность VclStylesinno, сделал отдельно чек боксы и отдельно лейблы
Аватара пользователя
Nordek

Re: Скрипты Inno Setup. Помощь и советы [часть 8]

Сообщение Nordek »

Как правильно задать параметр?

Exec(ExpandConstant('{win}\regedit.exe'), '/EA (ExpandConstant({commondesktop}\settings.reg HKEY_CURRENT_USER\Software\DWGTool\CADConverter)', '', SW_SHOW, ewWaitUntilTerminated, ResultCode);
Ответить

Вернуться в «Автоматическая установка приложений»