Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?

Re^4: exec() on Windows

by vitoco (Friar)
on May 25, 2010 at 23:30 UTC ( #841658=note: print w/replies, xml ) Need Help??

in reply to Re^3: exec() on Windows
in thread exec() on Windows

Well, my script is actually a PAR::Packer's pp generated exe file, installed with a shortcut icon in some operators' desktops. It collects some logs left by other running systems according to some manual schedules, cross all that info, generates a report in HTML format, and saves it in a shared file repository. The number of times it runs every day, depends on the weekday. As the reports must be kept, different names are used (adding the timestamp for example).

Every night, one of the sysops has to check how the thing is going, and the fastest and simplest way for them is to double-click that icon and wait for the report to be displayed (instead of searching the repository for it as a second step).

Don't say it loud, but perl is not (officially) allowed in our systems, so we are hiding our scripts with PAR ;-)

Replies are listed 'Best First'.
Re^5: exec() on Windows
by BrowserUk (Pope) on May 25, 2010 at 23:47 UTC

    Okay. So when you say "it doesn't work when double-clicked", what actually happens?

      When "double-clicked", exec() behaves as system() when IE is not already running, and system() behaves as exec() when IE is already running (displaying my doc in a new tab).

      This happens with both original .pl script (ActivePerl) and .exe binary (pp's "parl").

      Did you try the script in my first post? If not, may be you are lucky and don't have to fight against Windows, but if you have a Wintendo box with perl, save it along the first data file included in some folder, then double-click it in explorer and wait for IE to start. You should note that both programs are running together. Don't close neither of them, go to explorer window and double-click it again. This time, the program will finish as expected and IE will display a second tab with the doc.

      I tried this on WinXP (Spanish) and Win2K3 (English), the same happens...

      UPDATE: With behavior of exec() and system() I mean only the fact of waiting for the child process (IE) to close before exit or continue, respectively. A also tried my sample scripts on a machine with Firefox as the default web browser, and it does the same.

        Windows OS doesn't support exec in the POSIX form, just as it doesn't support fork. So these are both emulated by Perl on Windows--but not very accurately. In particular, exec will work pretty much exactly like system. Ie. It will start a new process and wait for that process to end.

        If however, you use system( 1, ... ) it will start the new process asynchronously (it won't wait) and if the perl script ends, the new process will continue as if the script had never existed.

        And yes. I use Windows.

        Now, how about you answer the question I asked?

        You've already agreed that if you replace exec with system( 1, 'yourname.html' );, and you run your script from the command line, it operates as you want it to.

        But, you said "it doesn't work" if you double-click it, or a short-cut to it, and my question to you was:


        Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
        "Science is about questioning the status quo. Questioning authority".
        In the absence of evidence, opinion is indistinguishable from prejudice.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://841658]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (8)
As of 2018-06-25 12:21 GMT
Find Nodes?
    Voting Booth?
    Should cpanminus be part of the standard Perl release?

    Results (126 votes). Check out past polls.