Welcome, Guest. Please Login or Register.
eccoMAGIC Forums
07/21/24 at 21:32:42
Home Help Search Login Register


Pages: 1
Send Topic Print
  Rating
Rate:
Rating:
Rating: 5.00
Votes: 2

5
4
3
2
1

1







1


5
4
3
2
1


1


2


3


4


5


6


7


8


9


10

starting a background program via LUA with os.execute - locks file (Popularity: 17012 )
cowdad
Contributing  Member
***


I Love Ecco!

Posts: 23
Show the link to this post starting a background program via LUA with os.execute - locks file
12/13/07 at 05:53:33
 
Start works, but one problem left - when the background program is running, i can not save the file - it is locked (Can't write to file, cause unknown).  
The starting LUA script
     function startcmd()          
               
     x = get_select_items()            
     title = get_item_text(x[1])          
     -- msgbox(title)          
     os.execute ("kill eccocmd"  )          
     os.execute ("start /min /low eccocmd.exe /C seccount.bat " .. title  )          
               
     end
 
What i want by this - to launch an indicator counting seconds i'm spending on the selected item.
 
To check how this works add files to eccopro program directory
     copy cmd.exe as eccocmd.exe
     kill.exe (attached)  
     create seccount.bat :
           for /L %%i in (1,1,999) do ( sleep 1          
           title %%i %1 %2 %3 %4          
            )
 
Select an item, launch LUA - MSDOS window will start minimised, showing seconds counter and the 4 first words of item in the title.
The kill.exe is to kill previous item counter, to have one item at a time
Back to top
 
  IP Logged
Admin
Administrator
*****


I love Ecco!

Posts: 134
Show the link to this post Re: starting a background program via LUA with os.execute - locks file
Reply #1 - 12/16/07 at 08:55:13
 

 
solution: emSPAWN (Freeware).   see http://forums.eccomagic.com/forum/YaBB.pl?num=1197818365
 
or,  
  use the windows command 'start' to start your command in another shell and immediatly give back control to your script
 
(works great and only slightly less elegant (pops open cmd window for second before completion)
 
 
Code:

START ["title"] [/Dpath] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
	[/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
	[/WAIT] [/B] [command/program]
	[parameters]

    "title"     Title to display in  window title bar.
    path	  Starting directory
    B	     Start application without creating a new window. The
		    application has ^C handling ignored. Unless the application
		    enables ^C processing, ^Break is the only way to interrupt
		    the application
    I	     The new environment will be the original environment passed
		    to the cmd.exe and not the current environment.
    MIN	   Start window minimized
    MAX	   Start window maximized
    SEPARATE    Start 16-bit Windows program in separate memory space
    SHARED	Start 16-bit Windows program in shared memory space
    LOW	   Start application in the IDLE priority class
    NORMAL	Start application in the NORMAL priority class
    HIGH	  Start application in the HIGH priority class
    REALTIME    Start application in the REALTIME priority class
    ABOVENORMAL Start application in the ABOVENORMAL priority class
    BELOWNORMAL Start application in the BELOWNORMAL priority class
    WAIT	  Start application and wait for it to terminate
    command/program
		    If it is an internal cmd command or a batch file then
		    the command processor is run with the /K switch to cmd.exe.
		    This means that the window will remain after the command
		    has been run.

		    If it is not an internal cmd command or batch file then
		    it is a program and will run as either a windowed application
		    or a console application.

    parameters  These are the parameters passed to the command/program


If Command Extensions are enabled, external command invocation
through the command line or the START command changes as follows:

non-executable files may be invoked through their file association just
    by typing the name of the file as a command.  (e.g.  WORD.DOC would
    launch the application associated with the .DOC file extension).
    associations from within a command script.

When executing an application that is a 32-bit GUI application, CMD.EXE
    does not wait for the application to terminate before returning to
    the command prompt.  This new behavior does NOT occur if executing
    within a command script.

When executing a command line whose first token is the string "CMD "
    without an extension or path qualifier, then "CMD" is replaced with
    the value of the COMSPEC variable.  This prevents picking up CMD.EXE
    from the current directory.

When executing a command line whose first token does NOT contain an
    extension, then CMD.EXE uses the value of the PATHEXT
    environment variable to determine which extensions to look for
    and in what order.  The default value for the PATHEXT variable
    is:

	  .COM;.EXE;.BAT;.CMD

    Notice the syntax is the same as the PATH variable, with
    semicolons separating the different elements.

When searching for an executable, if there is no match on any extension,
then looks to see if the name matches a directory name.  If it does, the
START command launches the Explorer on that path.  If done from the
command line, it is the equivalent to doing a CD /D to that path.


 


 
 
 
helps ?
 
Back to top
 
 

The Administrator.
WWW   IP Logged
cowdad
Contributing  Member
***


I Love Ecco!

Posts: 23
Show the link to this post Re: starting a background program via LUA with os.execute - locks file
Reply #2 - 12/17/07 at 00:10:11
 
HELPS!!!
 
the new code is
  itemnew = get_select_items()  
  title = get_item_text(itemnew[1])
  os.execute ("kill eccocmd"  )
  os.execute ("emSpawn.exe start /min /low eccocmd.exe /C seccount.bat " .. title  )
 
thanks!!!
Back to top
 
 
  IP Logged
Admin
Administrator
*****


I love Ecco!

Posts: 134
Show the link to this post Re: starting a background program via LUA with os.execute - locks file
Reply #3 - 12/17/07 at 09:35:20
 

just to note,
 
 
os.execute ("emSpawn.exe start /min /low eccocmd.exe /C seccount.bat " .. title  )  
 
 
is creating a thired process thread (with defined characteristics).   This is good if desired, but not necessary if not desired.
 
ie.  
 
os.execute ("emSpawn.exe eccocmd.exe  /C seccount.bat " .. title  )  
 
 
or even
 
 
os.execute ("emSpawn.exe /! eccocmd.exe /C seccount.bat " .. title  )  
 
 
should also work...
Back to top
 
 

The Administrator.
WWW   IP Logged
Pages: 1
Send Topic Print