iglezz
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Код: #define APPNAME "RunFromIni" [Setup] AppName={#APPNAME} OutputBaseFileName={#APPNAME} OutputDir=. AppVersion=0.1 DefaultDirName={src} PrivilegesRequired=lowest [Code] function C2P(S: String): String; begin StringChangeEx(S, '\n', #13, True); StringChangeEx(S, '\r', #10, True); StringChangeEx(S, '\t', #09, True); Result := S; end; procedure SplitExecString(const S: String; var Path, Parameters: String); var SplitChar: String; SplitPos, ShiftPos: Integer; begin case (S[1]) of '"' : begin SplitChar := '"' ; ShiftPos := 1; end; '''': begin SplitChar := ''''; ShiftPos := 1; end; else begin SplitChar := ' ' ; ShiftPos := 0; end; end; SplitPos := Pos(SplitChar, Copy(S, 2, 65535)); if SplitPos = 0 then SplitPos := Length(S); Path := ExpandFileName(Copy(S, 1+ShiftPos, SplitPos-ShiftPos)); Parameters := Copy(S, SplitPos+ShiftPos+1, 65535); end; procedure RunFromIni(const IniFile, SectionName: String; const MaxCount: Integer); var ExecString, ExecPath, ExecParameters: String; Count, ResultCode: Integer; begin for Count := 0 to MaxCount do begin ExecString := Trim(GetIniString(SectionName, IntToStr(Count), '', IniFile)); if ExecString <> '' then begin SplitExecString(ExecString, ExecPath, ExecParameters); MsgBox(Format(C2P('count:\t%d\ninput:\t<%s>\n\nexec:\t<%s>\nparam:\t<%s>'), [Count, ExecString, ExecPath, ExecParameters]), mbInformation, MB_OK); //Exec(ExecPath, ExecParameters, '', SW_SHOW, ewWaitUntilTerminated, ResultCode); end; end; end; function InitializeSetup: Boolean; begin RunFromIni(ChangeFileExt(ExpandConstant('{srcexe}'),'.ini'), 'setup', 256); Result:= false; end; | скрипт для программы-заглушки для проверки передаваемых параметров: Код: #define APPNAME "ExecTest" [Setup] AppName={#APPNAME} OutputBaseFileName={#APPNAME} OutputDir=. AppVersion=0.1 DefaultDirName={src} PrivilegesRequired=lowest [Code] var Count: Integer; Params: String; function C2P(S: String): String; begin StringChangeEx(S, '\n', #13, True); StringChangeEx(S, '\r', #10, True); StringChangeEx(S, '\t', #09, True); Result := S; end; function InitializeSetup: Boolean; begin for Count := 2 to ParamCount() do Params := Params + ParamStr(Count) + ' '; MsgBox(Format(C2P('cur.dir:\t%s\nexec:\t%s\n#params:\t%d\nparams:\t%s'), [GetCurrentDir(), ExpandConstant('{srcexe}'), ParamCount()-1, Params]), mbInformation, MB_OK); Result:= false; end; |
| Всего записей: 1521 | Зарегистр. 18-02-2003 | Отправлено: 02:36 17-11-2022 | Исправлено: iglezz, 16:31 17-11-2022 |
|