Войти

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 8]


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 [85] 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126

gurulea93
23-09-2016, 14:44
Привет можыте памагати
как правилина писати код в секции Exec



procedure CurStepChanged(CurStep: TSetupStep);
begin
If NewCheckBox1.Checked then
begin
Exec('{sys}\net.exe, user 1csupport {code:GetUser|Password1}', '/add, /fullname:""1csupport"", /comment:""1csupport"", /active:yes, /expires:never, /passwordchg:no'), '',;
end;
end;


Вот веси код




[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DisableProgramGroupPage=yes
UninstallDisplayIcon={app}\MyProg.exe
OutputDir=Output

[Code]
{ RedesignWizardFormBegin } // Don't remove this line!
// Don't modify this section. It is generated automatically.
var
authentication: TWizardPage;
PasswordEdit1: TPasswordEdit;
PasswordEdit2: TPasswordEdit;
PasswordEdit3: TPasswordEdit;
PasswordEdit4: TPasswordEdit;
PasswordEdit5: TPasswordEdit;
NewCheckBox1: TNewCheckBox;
NewCheckBox2: TNewCheckBox;
NewCheckBox3: TNewCheckBox;
NewCheckBox4: TNewCheckBox;
NewCheckBox5: TNewCheckBox;

function _NextButtonClick(Sender: TWizardPage): Boolean; forward;

procedure RedesignWizardForm;
begin
{ Creates custom wizard page }
authentication := CreateCustomPage(wpSelectDir, 'ISCustomPage1_Caption', 'ISCustomPage1_Description');

{ authentication }
with authentication.Surface do
begin
authentication.OnNextButtonClick := @_NextButtonClick;
end;

{ PasswordEdit1 }
PasswordEdit1 := TPasswordEdit.Create(WizardForm);
with PasswordEdit1 do
begin
Parent := authentication.Surface;
Left := ScaleX(240);
Top := ScaleY(24);
Width := ScaleX(121);
Height := ScaleY(21);
Text := '';
end;

{ PasswordEdit2 }
PasswordEdit2 := TPasswordEdit.Create(WizardForm);
with PasswordEdit2 do
begin
Parent := authentication.Surface;
Left := ScaleX(240);
Top := ScaleY(64);
Width := ScaleX(121);
Height := ScaleY(21);
Text := '';
end;

{ PasswordEdit3 }
PasswordEdit3 := TPasswordEdit.Create(WizardForm);
with PasswordEdit3 do
begin
Parent := authentication.Surface;
Left := ScaleX(240);
Top := ScaleY(104);
Width := ScaleX(121);
Height := ScaleY(21);
Text := '';
end;

{ PasswordEdit4 }
PasswordEdit4 := TPasswordEdit.Create(WizardForm);
with PasswordEdit4 do
begin
Parent := authentication.Surface;
Left := ScaleX(240);
Top := ScaleY(148);
Width := ScaleX(121);
Height := ScaleY(21);
Text := '';
end;

{ PasswordEdit5 }
PasswordEdit5 := TPasswordEdit.Create(WizardForm);
with PasswordEdit5 do
begin
Parent := authentication.Surface;
Left := ScaleX(240);
Top := ScaleY(192);
Width := ScaleX(121);
Height := ScaleY(21);
Text := '';
end;

{ NewCheckBox1 }
NewCheckBox1 := TNewCheckBox.Create(WizardForm);
with NewCheckBox1 do
begin
Parent := authentication.Surface;
Left := ScaleX(32);
Top := ScaleY(24);
Width := ScaleX(193);
Height := ScaleY(17);
Caption := '1csupport/1csupport2/1csupport3';
end;

{ NewCheckBox2 }
NewCheckBox2 := TNewCheckBox.Create(WizardForm);
with NewCheckBox2 do
begin
Parent := authentication.Surface;
Left := ScaleX(32);
Top := ScaleY(64);
Width := ScaleX(153);
Height := ScaleY(17);
Caption := 'Boss';
end;

{ NewCheckBox3 }
NewCheckBox3 := TNewCheckBox.Create(WizardForm);
with NewCheckBox3 do
begin
Parent := authentication.Surface;
Left := ScaleX(32);
Top := ScaleY(104);
Width := ScaleX(97);
Height := ScaleY(17);
Caption := 'Contabil1';
end;

{ NewCheckBox4 }
NewCheckBox4 := TNewCheckBox.Create(WizardForm);
with NewCheckBox4 do
begin
Parent := authentication.Surface;
Left := ScaleX(32);
Top := ScaleY(148);
Width := ScaleX(177);
Height := ScaleY(17);
Caption := 'Contabil2';
end;

{ NewCheckBox5 }
NewCheckBox5 := TNewCheckBox.Create(WizardForm);
with NewCheckBox5 do
begin
Parent := authentication.Surface;
Left := ScaleX(32);
Top := ScaleY(192);
Width := ScaleX(97);
Height := ScaleY(17);
Caption := 'Contabil3';
end;

PasswordEdit1.TabOrder := 0;
PasswordEdit2.TabOrder := 1;
PasswordEdit3.TabOrder := 2;
PasswordEdit4.TabOrder := 3;
PasswordEdit5.TabOrder := 4;
NewCheckBox1.TabOrder := 5;
NewCheckBox2.TabOrder := 6;
NewCheckBox3.TabOrder := 7;
NewCheckBox4.TabOrder := 8;
NewCheckBox5.TabOrder := 9;

{ ReservationBegin }
// This part is for you. Add your specialized code here.

{ ReservationEnd }
end;
// Don't modify this section. It is generated automatically.
{ RedesignWizardFormEnd } // Don't remove this line!

procedure PasswordEdit1Change(Sender: TObject);
begin

end;

procedure InitializeWizard();
begin
RedesignWizardForm;
end;

function GetUser(Param: String ): String;
begin
if Param = 'Password1' then
Result := PasswordEdit1.Text;
begin
if Param = 'Password2' then
Result := PasswordEdit1.Text;
begin
if Param = 'Password3' then
Result := PasswordEdit1.Text;
begin
if Param = 'Password4' then
Result := PasswordEdit1.Text;
begin
if Param = 'Password5' then
Result := PasswordEdit1.Text;
end;
end;
end;
end;
end;

function _NextButtonClick(authentication: TWizardPage): Boolean;
var
ResultCode: Integer;
begin
if NewCheckBox1.Checked then begin
if PasswordEdit1.Text = '' then begin
MsgBox('Введите пароль 1csupport/1csupport2/1csupport3!', mbError, MB_OK);
Result := False;
end;
end;
if NewCheckBox2.Checked then begin
if PasswordEdit2.Text = '' then begin
MsgBox('Введите пароль Boss!', mbError, MB_OK);
Result := False;
end;
end;
if NewCheckBox3.Checked then begin
if PasswordEdit3.Text = '' then begin
MsgBox('Введите пароль Contabil1!', mbError, MB_OK);
Result := False;
end;
end;
if NewCheckBox4.Checked then begin
if PasswordEdit4.Text = '' then begin
MsgBox('Введите пароль Contabil2!', mbError, MB_OK);
Result := False;
end;
end;
if NewCheckBox5.Checked then begin
if PasswordEdit5.Text = '' then begin
MsgBox('Введите пароль Contabil3!', mbError, MB_OK);
Result := False;
end;
end;
end;

function GetCheckBox1(): Boolean;
begin
if Param = 'Password1' then
Result := PasswordEdit1.Text;
begin
if Param = 'Password2' then
Result := PasswordEdit1.Text;
begin
if Param = 'Password3' then
Result := PasswordEdit1.Text;
begin
if Param = 'Password4' then
Result := PasswordEdit1.Text;
begin
if Param = 'Password5' then
Result := PasswordEdit1.Text;
end;
end;
end;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
If NewCheckBox1.Checked then
begin
Exec('{sys}\net.exe, user 1csupport {code:GetUser|Password1}', '/add, /fullname:""1csupport"", /comment:""1csupport"", /active:yes, /expires:never, /passwordchg:no'), '',;
end;

begin
If NewCheckBox2.Checked then
begin
Exec('{sys}\net.exe', 'user 1csupport {code:GetUser|Password1}', '/add', '/fullname:""1csupport""', '/comment:""1csupport""', '/active:yes', '/expires:never', '/passwordchg:no');
end;

begin
If NewCheckBox3.Checked then
begin
Exec('{sys}\net.exe', 'user 1csupport {code:GetUser|Password1}', '/add', '/fullname:""1csupport""', '/comment:""1csupport""', '/active:yes', '/expires:never', '/passwordchg:no');
end;

begin
If NewCheckBox4.Checked then
begin
Exec('{sys}\net.exe', 'user 1csupport {code:GetUser|Password1}', '/add', '/fullname:""1csupport""', '/comment:""1csupport""', '/active:yes', '/expires:never', '/passwordchg:no');
end;

begin
If NewCheckBox5.Checked then
begin
Exec('{sys}\net.exe', 'user 1csupport {code:GetUser|Password1}', '/add', '/fullname:""1csupport""', '/comment:""1csupport""', '/active:yes', '/expires:never', '/passwordchg:no');
end;
end;
end;
end;
end;
end;

vadjliss
01-10-2016, 20:55
парни как сделать чтобы при выборе портабле не устанавливалась папка в пуск меню
и соответственно она устанавливалась при установке

Dodakaedr
01-10-2016, 20:59
vadjliss, сделайте так чтобы при портабле не создавались ярлыки.

habib2302
02-10-2016, 00:04
vadjliss, есть такой вариант
[Setup]
DisableProgramGroupPage=yes

[Tasks]
Name: group; Description: {cm:CreateStartMenuIcon}; Components: I;

[Icons]
Name: {group}\Soft; Filename: {app}\soft.exe; Tasks: group;

Krinkels
05-10-2016, 21:42
Может кому пригодится. Плагин для поддержки регулярных выражений в инно. Во вложении либа + скрипт с несколькими примерами.

El Sanchez
06-10-2016, 09:39
Плагин для поддержки регулярных выражений в инно. »
Krinkels, есть же объект VBScript.RegExp (https://msdn.microsoft.com/en-us/library/kxt24tyh(v=vs.84).aspx) из стандартной vbscript.dll

Krinkels
06-10-2016, 12:09
есть же объект VBScript.RegExp из стандартной vbscript.dll »
Кому что удобнее, вообще делал для себя, и ни кого не принуждаю к использованию

AlekseyPopovv
13-10-2016, 05:42
Всем привет. У меня в инсталляторе содержатся файлы "*.msi" и пока они копируются (не устанавливаются) в папку "Temp" мне нужно удалить папку именно на этапе копирования а не установки. Как сделать?

yar_mary
13-10-2016, 10:21
Всем доброго времени суток. Очень нужна помощь специалистов. По наследству от админа досталась прога на inno setup которая копирует архив с ПК пользователя на сервер. Теперь грядет модернизация серверов и нужно в срочном порядке настроить копирование не на расшаренную папку сервера, а на ftp ресурс. Опыта написания в inno setup нет, так что взываю к помощи
Исходный код копирования:
FileCopy(ExpandConstant('{tmp}\{computername}.zip'), '\\ipсервера\расшаренная папка\' + GetIPAddress() + '.zip', false)
Пробовала сделать вот так, но не копирует:
FileCopy(ExpandConstant('{tmp}\{computername}.zip'), 'ftp://логин:пароль@IPадрес' +\папка'+ GetCommandLineParam('/REG') + '\' + GetIPAddress() + '.zip', false)

gurulea93
16-10-2016, 02:04
На счёт отправки файла на FTP почитай, что пишут (http://altkot.blogspot.md/2013/10/ftp.html) - можно с помощью штатной виндовской программы ftp.exe.

habib2302
16-10-2016, 11:24
AlekseyPopovv, [Code]
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
begin
RemoveDir(ExpandConstant('{app}'));
end;
end;

Доброе время суток. Возможно ли организовать MsgBox с отрицательным и положительным ответом на перезагрузку ПК после окончания установки?

nik1967
18-10-2016, 12:41
habib2302, [Setup]: AlwaysRestart

Возможные значения: yes или no
Значение по умолчанию: no

Описание:
При значении yes инсталлятор будет всегда предлагать перезагрузить компьютер после успешной установки, даже если этого не нужно (в секции [Files] могут быть параметры с флагом restartreplace).

habib2302
18-10-2016, 15:26
nik1967, у меня последняя страница отключена

Dodakaedr
18-10-2016, 17:00
habib2302, вот так пробуй [Setup]
AppName=App
AppverName=App v1.0
DefaultDirName={pf}\App
OutputDir=.
DisableFinishedPage=yes

[Code]
Procedure Reboot();
var
i: integer;
begin
Exec('shutdown.exe', '/r /t 0 /d u:4:2', '', SW_HIDE, ewNoWait, i);
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
begin
if MsgBox('Для завершения установки требуется перезагрузка системы.'+#13#10+'Перезагрузить сейчас?', mbInformation, MB_YESNO) = 6 then Reboot();
end;
end;

habib2302
18-10-2016, 20:59
Помогите решить еще одну проблему. не запускается екзешник, который посредством команды /(un)install /silent должен запустить или удалять службу
https://yadi.sk/d/IpYZ28CBx6ozB
[Run]
Filename: {app}\USBSRService.exe; Parameters: "/install /silent"; Flags: waituntilterminated

[UninstallRun]
Filename: "{app}\USBSRService.exe"; Parameters: "/uninstall /silent";

[Code]
procedure CurStepChanged(CurStep: TSetupStep);
var
RC: integer;
begin
if CurStep = ssInstall then
Exec(ExpandConstant('{app}\USBSRService.exe'), '/uninstall /silent', '', SW_HIDE, ewWaitUntilTerminated, RC);
end;

Dodakaedr
18-10-2016, 21:07
habib2302, Exec(ExpandConstant('{app}\USBSRService.exe'), ' /uninstall /silent', '', SW_HIDE, ewWaitUntilTerminated, RC);

habib2302
18-10-2016, 21:22
Dodakaedr, а с секций run?

Dodakaedr
18-10-2016, 21:31
habib2302, там все правильно

semiono
19-10-2016, 18:12
Нужно добваить пару строк в {sys}\drivers\etc\hosts

127.0.0.1 www.addr1.com
127.0.0.1 www.addr2.com

Во-первых, хотелось бы добавить строки только при их отсутствии, то есть без повторения строк.
Во-вторых, хотелось бы учесть случай отсутствия \n в конце последней записи существующего файла.
Однако, добавлять NEWLINE в пустой файл вначале, тоже не хотелось бы, для этого я думаю можно использовать
проверку размера файла == 0 и тогда делать записи с первой строки.

Желательно не выводить окна, если Non Admin mode, чтобы всё тихо было.
Лучше бы установить права доступа на файл в любом режиме, но я думаю это лишнее, возможно даже совсем не нужно.

El Sanchez
20-10-2016, 11:34
Нужно добваить пару строк в {sys}\drivers\etc\hosts »
semiono,

//////////////////////////////////////////////////
function StripWhitespace(const S: string): string;
var
C: Char;
i: Integer;
begin
for i := 1 to Length(S) do
begin
C := S[i];
if (C = ' ') or ((C >= #$0009) and (C <= #$000D)) or (C = #$00A0) or (C = #$0085) then Continue;
Result := Result + C;
end;
end;

/////////////////////////////////////////////////////////
function AddEntryToHosts(const Ip, Url: string): Boolean;
var
i: Integer;
begin
Result := False;
with TStringList.Create do
try
LoadFromFile(ExpandConstant('{sys}\drivers\etc\hosts'));
for i := 0 to Count - 1 do
if CompareText(StripWhitespace(Strings[i]), Trim(Ip) + Trim(Url)) = 0 then Exit;
Add(Ip + #9 + Url);
SaveToFile(ExpandConstant('{sys}\drivers\etc\hosts'));
Result := True;
finally
Free;
end;
end;

///////////////////////////
procedure InitializeWizard;
begin
if AddEntryToHosts('127.0.0.1', 'google.ru') then
MsgBox('Done', mbInformation, MB_OK);
end;


Желательно не выводить окна, если Non Admin mode, чтобы всё тихо было. »
nonadmin-программам в системных директориях делать нечего.




© OSzone.net 2001-2012