I haven't figured out how to fix this the right way yet, but here is a work around 
that 
may work for you.

Put this:

    for (keys %ENV) { delete $ENV{$_} if /^PAR_/ }

right before:

    Win32::Process::Create($ProcessObj,

in bar.pl.

Something in the PAR environment variables looks already in progress and foo.exe isn't 
creating it's own cache directory, so there are "collisions" when foo.exe unpacks. By 
cleaning out the PAR_xx variables, I can get bar/foo to run with and without -C and -d.


On 16 Feb 2004 at 21:30, Alan Stewart wrote:

> I think I see a clue. When I build bar and foo without -d or -C, they run but they 
> are 
> unpacked into the same one and only cache directory instead of two dirs as I might 
> expect. Because of using Win32::Process, both prgrams are seeing the same progname 
> used 
> to create the sha1 cache name. When you try to use the -C option, one program tries 
> to 
> clear out stuff currently in use by the other (??) or overwrite stuff in use by the 
> other (??) and the permissions error occurs. No clue yet what causes the looping of 
> bar.exe when foo is built with -d.
> 
> Hmmmm....
> 
> On 16 Feb 2004 at 23:12, Jesse Schoch wrote:
> 
> > It seems -d is effected as well.  I may be able to get away without -d, but
> > in my previous testing on NT 4 it caused problems.  Also I noticed some
> > loping problems, where the exec'ed pp built program would run over and over
> > again, not sure what caused them, but deleting the cache seemed to help.
> > 
> > Autrijus I kind of need -d, do you have any ideas?
> > 
> > E:\test>pp -d -o bar.exe bar.pl
> > 
> > E:\test>pp -d -o foo.exe foo.pl
> > 
> > E:\1LinkMedia>bar
> > BAR
> > Permission denied at C:/Perl/site/lib/PAR/Heavy.pm line 127.
> > Compilation failed in require at script/bar.pl line 2.
> > BEGIN failed--compilation aborted at script/bar.pl line 2.
> > exit code= 13
> > 
> > E:\test>pp -o bar.exe bar.pl
> > 
> > E:\test>pp -o foo.exe foo.pl
> > 
> > E:\1LinkMedia>bar
> > BAR
> > FOO
> > exit code= 0
> > 
> > E:\test>pp -V
> > Perl Packager, version 0.05 (PAR version 0.79_97)
> > Copyright 2002, 2003, 2004 by Autrijus Tang <[EMAIL PROTECTED]>
> > 
> > Neither this program nor the associated "parl" program impose any
> > licensing restrictions on files generated by their execution, in
> > accordance with the 8th article of the Artistic License:
> > 
> >     "Aggregation of this Package with a commercial distribution is
> >     always permitted provided that the use of this Package is embedded;
> >     that is, when no overt attempt is made to make this Package's
> >     interfaces visible to the end user of the commercial distribution.
> >     Such use shall not be construed as a distribution of this Package."
> > 
> > Therefore, you are absolutely free to place any license on the resulting
> > executable, as long as the packed 3rd-party libraries are also available
> > under the Artistic License.
> > 
> > This program is free software; you can redistribute it and/or modify it
> > under the same terms as Perl itself.  There is NO warranty; not even for
> > MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
> > -----Original Message-----
> > From: Alan Stewart [mailto:[EMAIL PROTECTED]
> > Sent: Monday, February 16, 2004 10:27 PM
> > To: Jesse Schoch; [EMAIL PROTECTED]
> > Subject: Re: exec problems
> > 
> > 
> > On 16 Feb 2004 at 21:47, Jesse Schoch wrote:
> > 
> > > Here is a simple test.  Let me know if anyone gets the same results.
> > >
> > >
> > > E:\test>bar
> > > BAR
> > > Permission denied at -e line 640.
> > > exit code= 13
> > >
> > > E:\test>perl bar.pl
> > > BAR
> > > FOO
> > > exit code= 0
> > >
> > > _____________bar.pl___________________
> > >
> > > #!/usr/bin/perl
> > > use Win32::Process;
> > > print "BAR\n";
> > > Win32::Process::Create($ProcessObj,
> > >                                 "e:/test/foo.exe",
> > >                                 "foo",
> > >                                 0,
> > >                                 NORMAL_PRIORITY_CLASS,
> > >                                 ".")|| die &Error;
> > > $ProcessObj->Wait(INFINITE )|| die &Error;
> > > $ProcessObj->GetExitCode($exitcode)|| die &Error;
> > > print "exit code= $exitcode\n";
> > > sub Error
> > >         {
> > >         print Win32::FormatMessage( Win32::GetLastError() );
> > >         }
> > >
> > >
> > > ____________foo.pl____________________
> > >
> > > #!/usr/bin/perl -w
> > >
> > > print "FOO\n";
> > >
> > > ____________build_____________________
> > >
> > > pp -C -o bar.exe bar.pl
> > >
> > 
> > You don't say how foo.exe was built, but I get the same error if either
> > bar.exe or
> > foo.exe has the -C option. If neither one was built with -C, it works for
> > me.
> > 
> > Alan Stewart
> > 
> > 
> > 
> 
> 


Reply via email to