- Vytvoril D2000 Dev Team na okt 12, 2017
Funkcia %StartProcess
Funkcia
Funkcia vytvorí nový proces, ktorý potom spustí daný spustiteľný súbor v bezpečnostnom kontexte daných parametrov
(užívateľ, doména a heslo).
Deklarácia
INT %StartProcess( TEXT in userName, TEXT in domain, TEXT in password, TEXT in applName, TEXT in commandLine, TEXT in currDir, BOOL in bSync, INT in timeout, BOOL in bHide )
Parametre
userName | Reťazec určujúci meno užívateľa. Meno užívateľského účtu pre prihlásenie sa. Ak používate formát UPN,
parameter user @DNS_domain_name, domain musí byť prázdny reťazec. Užívateľský účet musí mať na lokálnom počítači oprávnenie Log On Locally. Toto oprávnenie je udelené všetkým užívateľom na pracovných staniciach a serveroch, ale len administrátorom na ovládačoch domény. Použiteľné len na platformách Windows XP, Windows 2000 Professional, Windows Server 2003 alebo Windows 2000 Server. Na inej platforme funkcia vráti neplatnú hodnotu. Ak je parameter prázdny reťazec, proces je štartovaný pod užívateľom, pod ktorým beží volajúci proces. Takéto volanie je možné použiť aj na ostatných MS Windows platformách. |
domain | Reťazec určujúci meno domény alebo servera, ktorého databáza účtov obsahuje účet UserName. Ak je parameter prázdny reťazec, meno užívateľa musí byť definované vo formáte UPN. |
password | Reťazec špecifikujúci čisto textové heslo pre účet UserName. |
applName | Meno programu (aplikácie), ktorý sa má spustiť. Tento program môže byť aplikácia pracujúca pod operačným
systémom Windows. Tiež môže pracovať pod iným typom operačného systému (napr. MS-DOS alebo OS/2), ak je tento OS dostupný
na lokálnom počítači. Reťazec môže určovať plnú cestu a meno súboru programu, ktorý sa má spustiť. Ak meno súboru neobsahuje príponu, predpokladá sa prípona .exe. Preto, ak je meno súboru .com, tento parameter musí obsahovať koncovku .com. Parameter applName môže byť prázdny reťazec. V takom prípade meno programu musí byť prvý reťazec oddelený oddeľovačom v reťazci commandLine. Ak meno programu je dlhé a obsahuje medzery, je nutné použiť úvodzovky na označenie začiatku a konca tohto reťazca. Inak meno programu nie je jednoznačné. Napríklad reťazec "c:\program files\sub dir\program name". Tento reťazec môže byť interpretovaný rôzne. Systém sa ho snaží interpretovať v nasledovnom poradí:
|
commandLine | Reťazec špecifikujúci príkazový riadok, ktorý sa má vykonať. Parameter môže byť prázdny reťazec. V tom prípade
funkcia použije reťazec applName ako príkazový riadok. Ak parametre applName a commandLine nie sú prázdne reťazce, applName určuje program, ktorý sa má vykonať a commandLine určuje príkazový riadok. Nový proces môže použiť funkciu GetCommandLine (Win32 API) na zistenie celého príkazového riadku. Konzolové procesy, ktoré sú písané v jazyku C môžu používať argumenty arg a argv na analyzovanie príkazového riadku. Keďže ergv[0] je meno programu, C programátori zvyčajne opakujú meno programu ako prvý reťazec (slovo) v príkazovom riadku. Parameter môže obsahovať meno programu (aplikácie), ktorý sa má spustiť (viď. parameter applName). Ak meno neobsahuje cestu na adresár, systém hľadá daný spustiteľný súbor nasledovne:
|
currDir | Reťazec, ktorý určuje aktuálne označenie disku a adresára pre nový proces. Reťazec musí obsahovať celú cestu vrátane označenia disku. Ak je parameter prázdny reťazec, nový proces má označenie disku rovnaké ako systémová služba, ktorá vytvára proces. |
bSync | Parameter špecifikuje, či skript čaká na ukončenie štartovaného procesu. Možné hodnoty:
|
timeout | Maximálny čas behu štartovaného procesu. Parameter má význam, len ak bSync=@TRUE. |
bHide | @TRUE - skrytie okna štartovanej aplikácie. @FALSE - zobrazenie okna štartovanej aplikácie. |
Návratová hodnota
Návratová hodnota je typu Int a:
- je neplatná, ak sa nepodarilo spustiť proces,
- je rovná hodnote _ERR_TIME_OUT, ak bSync=@TRUE a bol prekročený časový limit,
- je rovná 0, ak bSync=@FALSE a proces bol spustený,
- ináč nadobúda hodnotu návratového kódu procesu.
Poznámka
Funkcia v prípade neúspechu zapíše do súboru event.log chybu, ktorá nastala.
Príklad
Spustenie programu MS Excel s otvorením súboru C:\TEMP\Sheet1.xls.
Program MS Excel je nainštalovaný v adresári C:\Program Files\/Microsoft Office\Office\excel.exe.
Meno lokálneho užívateľa je Adm a heslo je pwd.
Program MS Excel je nainštalovaný v adresári C:\Program Files\/Microsoft Office\Office\excel.exe.
Meno lokálneho užívateľa je Adm a heslo je pwd.
BEGIN TEXT _cmdLine INT _retCode _cmdLine := %Chr(34) + "c:\Program Files\Microsoft Office\Office10\EXCEL.EXE" + %Chr(34) + "c:\temp\Zošit1.xls" _retCode := %StartProcess("Adm", "", "", "", _cmdLine, "c:\temp", @TRUE, 30, @FALSE) IF _retCode\VLD THEN IF _retCode = _ERR_TIME_OUT THEN ; MS Excel neskončil v časovom limite 30 sekúnd a bol násilne ukončený ELSE ; MS Excel skončil v časovom limite 30 sekúnd a _retCode obsahuje návratový kód ENDIF ELSE ; nepodarilo sa naštartovať program ; neexistuje c:\Program Files\Microsoft Office\Office10\EXCEL.EXE, alebo sa nepodarilo prihlásiť užívateľa ENDIF END
Súvisiace stránky:
0 komentárov