[архив] Inno Setup .:[все вопросы]:.

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

Re: [архив] Inno Setup .:[все вопросы]:.

Сообщение Serega »

Serega_, ))) Я так и сделал... поля ввода для 111 и 222 отдельные т.е. когда инсталяция завершена в ini файле отображается следующее

1. Если создаю ini:

Data Source = 111

Initial Catalog = 222



2. Если изменяю ini:

ConStr=Provider=***;Data Source=***;Initial Catalog=***



Data Source = 111

Initial Catalog = 222

Как видно inno setup при записи все время пытается записать параметры в отдельные строки. а при изменении не изменяет уже существующие параметры а добавляет те же но во все те же отдельные строки. Т.е. key для ini может быть только один (тот что первый (ConStr)). Мне набросал знакомый код по разбиению строки на отдельные параметры и дальнейшей ее сборки обратно в строку. только вот у меня не получается ее реализовать в

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

. 

Заранее извиняюсь за обьем сообщения может еще кто что посоветует? )) 


читать дальше »




[code]unit FrmMain;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IniFiles, StdCtrls;
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Button3: TButton;
    Edit6: TEdit;
    Button4: TButton;
    Edit7: TEdit;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    FIntegrSecurity : String;
    FPersistSecInfo : String;
    FInitialCatalog : String;
    FDataSource     : String;
    FProvider       : String;
    procedure ParseStr(const AStr: String; var AProvider, AIntegrSecurity,
      APersistSecInfo, AInitialCatalog, ADataSource: String);
//    procedure CombineStr(var AStr: String; const AProvider, AIntegrSecurity,
//      APersistSecInfo, AInitialCatalog, ADataSource: String);
    procedure CombineStr(var AStr: String; const AProvider,
      AInitialCatalog, ADataSource: String);
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
const
  SIntegrSecurity = 'Integrated Security';
  SPersistSecInfo = 'Persist Security Info';
  SInitialCatalog = 'Initial Catalog';
  SDataSource     = 'Data Source';
  SProvider       = 'Provider';
  SDelim          = ';';
  SEqual          = '=';
procedure TForm1.Button2Click(Sender: TObject);
begin
  Close;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
  Ini: TIniFile;
  S: String;
begin
  Ini := TIniFile.Create('c:\a.ini');
  try
    S := Ini.ReadString('CONNECT', 'ConStr', '');
    Edit6.Text := S;
  finally
    if Assigned(Ini) then Ini.Free;
  end;
end;
{
procedure TForm1.CombineStr(var AStr: String; const AProvider,
  AIntegrSecurity, APersistSecInfo, AInitialCatalog, ADataSource: String);
begin
  AStr := Format('%s=%s;%s=%s;%s=%s;%s=%s;%s=%s', [SProvider, AProvider,
    SIntegrSecurity, AIntegrSecurity, SPersistSecInfo, APersistSecInfo,
    SInitialCatalog, AInitialCatalog, SDataSource, ADataSource]);
end;
}
procedure TForm1.CombineStr(var AStr: String; const AProvider,
      AInitialCatalog, ADataSource: String);
begin
  AStr := Format('%s=%s;%s=%s;%s=%s', [SProvider, AProvider,
    SInitialCatalog, AInitialCatalog, SDataSource, ADataSource]);
end;
procedure TForm1.ParseStr(const AStr: String; var AProvider,
  AIntegrSecurity, APersistSecInfo, AInitialCatalog, ADataSource: String);
  procedure ExtractParamAndValue(const Str: String; var Param, Value: String);
  var
    I: Integer;
  begin
    Param := ''; Value := '';
    I := Pos(SEqual, Str);
    if (I > 0) and (I < Length(Str)) then
    begin
      Param := copy(Str, 1, I - 1);
      Value := copy(Str, I + 1, MAXINT);
    end;
  end;
var
  I: Integer;
  S, S1, S2: String;
begin
  S := AStr;
  repeat
    I := Pos(SDelim, S);
    if I > 0 then
    begin
      ExtractParamAndValue(copy(S, 1, I - 1), S1, S2);
      S := copy(S, I + 1, MAXINT);
    end
    else
    begin
      ExtractParamAndValue(S, S1, S2);
      S := '';
    end;
    if S1 = SProvider       then FProvider       := S2 else
    if S1 = SIntegrSecurity then AIntegrSecurity := S2 else
    if S1 = SPersistSecInfo then APersistSecInfo := S2 else
    if S1 = SInitialCatalog then AInitialCatalog := S2 else
    if S1 = SDataSource     then ADataSource     := S2;
  until I <= 0
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
  ParseStr(Edit6.Text, FProvider, FIntegrSecurity, FPersistSecInfo,
    FInitialCatalog, FDataSource);
  Edit1.Text := FProvider;
  Edit2.Text := FIntegrSecurity;
  Edit3.Text := FPersistSecInfo;
  Edit4.Text := FInitialCatalog;
  Edit5.Text := FDataSource;
end;
procedure TForm1.Button4Click(Sender: TObject);
var
  S: String;
begin
  self.CombineStr(S, Edit1.Text, Edit5.Text, Edit4.Text);
  Edit7.Text := S;
end;
end.
Аватара пользователя
tem000

Re: [архив] Inno Setup .:[все вопросы]:.

Сообщение tem000 »

Цитата MrLD:



Заранее извиняюсь за обьем сообщения
[архив] Inno Setup .:[все вопросы]:.




используйте тег [more]


Цитата MrLD:



inno setup при записи все время пытается записать параметры в отдельные строки
[архив] Inno Setup .:[все вопросы]:.




так вобще-то это правильно ведь инишник никогда не пишется в одну строку, одним словом неправильный у вас инишник...


Цитата MrLD:



Мне набросал знакомый код
[архив] Inno Setup .:[все вопросы]:.




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

Re: [архив] Inno Setup .:[все вопросы]:.

Сообщение tem000 »

Приветствую



Подскажите как правильно/корректно реализовать проверку принадлежности Пользователя системы к группе Локальных администраторов на компьютере?



планируется использовать на системах от Win9x и до WinVista. У клиентов разные ОСи стоят.
Аватара пользователя
tem000

Re: [архив] Inno Setup .:[все вопросы]:.

Сообщение tem000 »

Serega_, небольшая трабла в
>';}else{ div.style.display = 'none'; this.innerHTML = 'диалоге>>';} return false">диалоге>>





завершении установки, там можно как нибудь прозрачность замутить, помоги если не трудно, а то я в секции CODE ваще ниче не понимаю.
Аватара пользователя
Serega

Re: [архив] Inno Setup .:[все вопросы]:.

Сообщение Serega »

там надо создать ini и внести в него секцию [Connect] и запись в виде строки которую я приводил в пример.



[Connect]

ConStr=Provider=***;Data Source=***;Initial Catalog=***







и путь прописать к инишнику




Цитата MrLD:



procedure TForm1.Button1Click(Sender: TObject);

var

Ini: TIniFile;

S: String;

begin

Ini := TIniFile.Create('c:\a.ini');

try

S := Ini.ReadString('CONNECT', 'ConStr', '');

Edit6.Text := S;

finally

if Assigned(Ini) then Ini.Free;

end;

end;
[архив] Inno Setup .:[все вопросы]:.
Аватара пользователя
tem000

Re: [архив] Inno Setup .:[все вопросы]:.

Сообщение tem000 »

Serega_, все работает единственное чекбокс активируется только при наведении на сам квадратик. В других диалогах, можно нажать на текст чтобы поставить галочку, это понятно если чекбокс растягивать на текст, то опять получится белое пятно. В принципе это не критично, главное все получилось СПАСИБО!!! Изображение
Аватара пользователя
Serega

Re: [архив] Inno Setup .:[все вопросы]:.

Сообщение Serega »

tem000, я как то об этом не подумал, добавил
читать дальше »




Код:

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

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}
Code]
var
  WelcomeLabel1,WelcomeLabel2,FinishedHeadingLabel,RunLabel,
  FinishedLabel,PageNameLabel,PageDescriptionLabel:TLabel;
  RunMyProg: TCheckBox;
procedure RLabelOnClick(Sender: TObject);
begin
  if RunMyProg.Checked=false then
  begin
    RunMyProg.Checked := true;
  end else
    RunMyProg.Checked := false;
end;
// функция для запуска программы если отмечен чебокс
procedure CurStepChanged(CurStep: TSetupStep);
var
  ErrorCode: Integer;
begin
if CurStep = ssDone then
  begin
    if RunMyProg.Checked then
    Exec(ExpandConstant('{app}\MyProg.exe'), '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
  end;
end;
procedure InitializeWizard();
begin
  WizardForm.WelcomeLabel1.Hide;
  WizardForm.WelcomeLabel2.Hide;
  WizardForm.PageNameLabel.Hide;
  WizardForm.PageDescriptionLabel.Hide;
  WizardForm.FinishedHeadingLabel.Hide;
  WizardForm.FinishedLabel.Hide;
// низнаю почему, но Hide не действует. Поэтому просто уменьшил размер
  WizardForm.RunList.Height := 0;
  WizardForm.RunList.Width := 0;
      WizardForm.WizardBitmapImage.Align:=true;
      WizardForm.WizardBitmapImage2.Align:=true;
      WizardForm.WizardSmallBitmapImage.Align:=true;
  WelcomeLabel1:=TLabel.Create(WizardForm);
  WelcomeLabel1.Left:=ScaleX(150);
  WelcomeLabel1.Top := ScaleY(15);
  WelcomeLabel1.Width := ScaleX(320);
  WelcomeLabel1.Height := ScaleY(75);
  WelcomeLabel1.AutoSize := False;
  WelcomeLabel1.WordWrap := True;
  WelcomeLabel1.Font.Color := clBlack;
// здесь можно поиграть шрифтом
//  WelcomeLabel1.Font.Style := [fsBold];
//  WelcomeLabel1.Font.Name:='MS Sans Serif';
  WelcomeLabel1.Font.Size := 14;
  WelcomeLabel1.Transparent := True;
  WelcomeLabel1.Parent := WizardForm.WelcomePage;
      WelcomeLabel2:=TLabel.Create(WizardForm);
      WelcomeLabel2.Left := ScaleX(150);
      WelcomeLabel2.Top := ScaleY(90);
      WelcomeLabel2.Width := ScaleX(320);
      WelcomeLabel2.Height := ScaleY(200);
      WelcomeLabel2.AutoSize := False;
      WelcomeLabel2.WordWrap := True;
      WelcomeLabel2.Font.Color := clBlack;
      WelcomeLabel2.Font.Size := 8;
      WelcomeLabel2.Transparent := True;
      WelcomeLabel2.Parent := WizardForm.WelcomePage;
  PageNameLabel := TLabel.Create(WizardForm);
  PageNameLabel.Left := ScaleX(25);
  PageNameLabel.Top := ScaleY(10);
  PageNameLabel.Width := ScaleX(300);
  PageNameLabel.Height := ScaleY(14);
  PageNameLabel.AutoSize := False;
  PageNameLabel.WordWrap := True;
  PageNameLabel.Font.Color := clBlack;
  PageNameLabel.Font.Style := [fsBold];
  PageNameLabel.Transparent := True;
  PageNameLabel.Parent := WizardForm.MainPanel;
      PageDescriptionLabel := TLabel.Create(WizardForm);
      PageDescriptionLabel.Left := ScaleX(40);
      PageDescriptionLabel.Top := ScaleY(25);
      PageDescriptionLabel.Width := ScaleX(475);
      PageDescriptionLabel.Height := ScaleY(30);
      PageDescriptionLabel.AutoSize := False;
      PageDescriptionLabel.WordWrap := True;
      PageDescriptionLabel.Font.Color := clBlack;
      PageDescriptionLabel.Transparent := True;
      PageDescriptionLabel.Parent := WizardForm.MainPanel;
  FinishedHeadingLabel:=TLabel.Create(WizardForm);
  FinishedHeadingLabel.Left := ScaleX(150);
  FinishedHeadingLabel.Top := ScaleY(15);
  FinishedHeadingLabel.Width := ScaleX(320);
  FinishedHeadingLabel.Height := ScaleY(75);
  FinishedHeadingLabel.AutoSize := False;
  FinishedHeadingLabel.WordWrap := True;
  FinishedHeadingLabel.Font.Color := clBlack;
// здесь тоже можно поиграть шрифтом
//  FinishedHeadingLabel.Font.Style := [fsBold];
//  FinishedHeadingLabel.Font.Name:='MS Sans Serif';
  FinishedHeadingLabel.Font.Size := 14;
  FinishedHeadingLabel.Transparent := True;
  FinishedHeadingLabel.Parent := WizardForm.FinishedPage;
      FinishedLabel:=TLabel.Create(WizardForm);
      FinishedLabel.Left := ScaleX(150);
      FinishedLabel.Top := ScaleY(90);
      FinishedLabel.Width := ScaleX(320);
      FinishedLabel.Height := ScaleY(200);
      FinishedLabel.AutoSize := False;
      FinishedLabel.WordWrap := True;
      FinishedLabel.Font.Color := clBlack;
      FinishedLabel.Font.Size := 8;
      FinishedLabel.Transparent := True;
      FinishedLabel.Parent := WizardForm.FinishedPage;
  RunMyProg := TCheckBox.Create(WizardForm);
  RunMyProg.Parent := WizardForm.FinishedPage;
  RunMyProg.Left := ScaleX(150);
  RunMyProg.Top := ScaleY(152);
  RunMyProg.Width := ScaleX(14);
  RunMyProg.Height := ScaleX(14);
//  RunMyProg.Checked := true; // чтоб чебокс был отмечен, раскоментируй строку
      RunLabel:=TLabel.Create(WizardForm);
      RunLabel.Left := ScaleX(170);
      RunLabel.Top := ScaleY(150);
      RunLabel.Width := ScaleX(200);
      RunLabel.Height := ScaleY(20);
      RunLabel.AutoSize := False;
      RunLabel.WordWrap := True;
      RunLabel.Font.Color := clBlack;
      RunLabel.Font.Size := 10;
      RunLabel.OnClick := @RLabelOnClick;
      RunLabel.Transparent := True;
      RunLabel.Parent := WizardForm.FinishedPage;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
  WelcomeLabel1.Caption := WizardForm.WelcomeLabel1.Caption;
  WelcomeLabel2.Caption := WizardForm.WelcomeLabel2.Caption;
  PageNameLabel.Caption := WizardForm.PageNameLabel.Caption;
  PageDescriptionLabel.Caption := WizardForm.PageDescriptionLabel.Caption;
  FinishedHeadingLabel.Caption := WizardForm.FinishedHeadingLabel.Caption;
  FinishedLabel.Caption := WizardForm.FinishedLabel.Caption;
// здесь придётся вручную вводить требуемый текст
  RunLabel.Caption := 'Запустить программу';
end;
Аватара пользователя
tem000

Re: [архив] Inno Setup .:[все вопросы]:.

Сообщение tem000 »

Serega_, а есть возможность добавить в скрипт, чтоб и во время установки тоже была картинка (возможно смещение прогрессбара вниз и показ слайд-шоу в окне инсталлятора)?
Аватара пользователя
Serega

Re: [архив] Inno Setup .:[все вопросы]:.

Сообщение Serega »

MrLD, естественно... иначе бы не давал.
Аватара пользователя
de_MAX

Re: [архив] Inno Setup .:[все вопросы]:.

Сообщение de_MAX »

Serega_, У тебя tool- зы какиенить установленны?? а то у меня inno Application не понимает ((
Ответить

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