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í:
  1. c:\program.exe files\sub dir\program name
  2. c:\program files\sub.exe dir\program name
  3. c:\program files\sub dir\program.exe name
  4. c:\program files\sub dir\program name
Ak program je 16-bitová aplikácia, applName by mal byť prázdny reťazec a parameter commandLine by mal špecifikovať túto aplikáciu ako aj jej argumenty.
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:
  1. adresár, odkiaľ bola aplikácia načítaná
  2. aktuálny adresár pre proces - tento nie je explicitne definovaný a preto môže byť ľubovoľný
  3. systémový adresár Windows - System32 alebo System
  4. adresár Windows
  5. adresáre, ktoré sú obsiahnuté v premennej PATH
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:
  • @TRUE - funkcia spustí proces a čaká na jeho ukončenie. Parameter timeout určuje maximálny čas behu programu v sekundách. Ak je tento prekročený, proces je násilne ukončený a návratová hodnota funkcie je _ERR_TIME_OUT. Ak je proces samostatne ukončený pred dosiahnutím časového limitu, návratová hodnota funkcie je návratový kód procesu.
  • @FALSE - funkcia spustí proces a pokračuje nasledujúcou akciou. Parameter timeout sa neberie do úvahy. Návratová hodnota je 0, ak bol proces úspešne spustený. Ak nie, návratová hodnota je neplatná hodnota.
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.
 
 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

Napíšte komentár