I've had the same problem but it was a long time ago with a much older PerlApp an Wx.
Not sure if this helps but it's worth a try.

- Make sure you explicitly destroy every dialog (or window/frame etc.) you create. - Another thing that has helped me is instead of just using "exit" or closing the last window is something like this:

sub OnExit {
 my( $self, $event ) = @_;
 $self->Destroy();
 Wx::wxTheApp()->ExitMainLoop;
}

Cheers,
Huub Peters

----- Original Message ----- From: "Mark Swayne" <[EMAIL PROTECTED]>
To: "Mark Dootson" <[EMAIL PROTECTED]>
Cc: <[email protected]>
Sent: Tuesday, November 13, 2007 6:56 PM
Subject: Re: PerlApp, rmtree failed because directory not empty


Mark,

1.  Yes it is.  I just doubled checked.
2. I'm not sure what it is. I believe it is one of the many dlls PerlApp creates. I'm not sure what tool you are using to inspect dlls, and I can't find the entry for the debug library. I did find out that it depends on the 3 .*wxperl dlls as well as perl58.dll.

The list of functions includes a long list of wxEVT.* constants and the names of various controls, and it exports _boot_Wx and boot_Wx. The dll also contains quite a few resources: icons, cursors and so forth. I think the file is PerlApp's wrapped up version of Wx.pm.

If there's a specific tool I can to get a more definitive answer for you, I am happy to use it. I can also send you the dll if that will help.

Further experimentation with my code, shows that in one case, the app will close cleanly. I'll describe a bit of my app below, as well as the single case where cleanup works.

My application is along the lines of a "Wizard"-it guides the user through a series of screens and then exits. I am not using the wxWizard class, becuase I needed more control of presentation than it afforded. I display different pages of the wizard by showing and hiding different children of a sizer that contains each page. If I close the application without changing pages, cleanup happens as expected. However as soon as I move to a different screen, the cleanup fails, even if I move back to the first screen.

Thank you,

--Mark Swayne

Mark Dootson wrote:
Hi,

I have tested all wxPerl XS modules and all seems to be OK. I can't reproduce the problem.

The only things left to check are:

1) 'use Wx::Perl::Packager;' really is the first line in your script.

2) In the files left behind when the app exits, what is a25e484f72ddea79baa955627d488a39.dll ?

You should be able to take a look at the file contents and tell.
If it is an ActivePerl dll, you can tell by the last entry in the file which is the location of the debug library.

If it is one of the gcc built wxPerl dlls, it should be obvious from the file content.


Regards

Mark






Mark Swayne wrote:

Thank you for your prompt response, Mark.  I do use Wx::Perl::Packager,
and it is a great help.  Without the benefit of this module, I would not
be able to use WxPerl as a production library--the effort involved in
producing compiled packages would too great.   It is an incredibly
useful module, thank you also for the time you've put into developing
and maintaining it.

I guess I wasn't clear enough in my problem description.  The 'rmtree'
error sometimes shows up when a program crashes or dies due to missing
libraries, and Wx::Perl::Packager would be exactly the right tool to use
to address the issue.  This isn't what's happening in this case.  The
packages get built and run properly, its just that they fail to clean up
after themselves on shutdown.

After I've built the package, when I click 'Test it' to run my
application, my app runs normally and without any problems.  When I exit
the program, perlapp shows the 'rmtree failed' error.  When I look in
the temp directory, I find the scratch directory PerlApp created to
cache needed files in.  It invariably contains the same set of dlls:
a25e484f72ddea79baa955627d488a39.dll
mingwm10.dll
perl58.dll
wxbase28u_gcc_wxperl.dll
wxmsw28u_adv_gcc_wxperl.dll
wxmsw28u_core_gcc_wxperl.dll

When the app is running, the following dlls are present:
0858f617e1b241374d9f120bb26fb7b8.dll
0a57d12a652a9aa8a9a0b50b63eacf69.dll
0a5e4c87fa5c54c914abae722e8df846.dll
106d5d75037d32173224d1fcc756ac31.dll
1823e8f62785746fd29cf0b06c636600.dll
27c8e6827f78ba1831292105bb4b6e19.dll
40264fde9f2a92019910d137c9cc247d.dll
407508194147155aad116bbb9932f700.dll
465d2954d90fe6225ea61b3907c91da8.dll
5304c9fae7d015d0af26a6a68bdda3c7.dll
541cd9bc8060027290e90d3e07d19dcb.dll
690d4dd022c4e68f9fdfa754e2bcc404.dll
6c16bd625d9658445cc3dcebf15967ba.dll
8093d6335a3324a2d1afe442c6f3c959.dll
9d97b746759aac7b9b0fe180387eda8b.dll
a07d047c3b9dd390896ae265d899a29b.dll
a0cfb70acbca692b4e0caad1fdfc6c02.dll
a25e484f72ddea79baa955627d488a39.dll
ae04e4f42bab17aaf801b5d019ab471e.dll
ae4c340263b2b4ae26334d8b3c9333dd.dll
b0336f6abf3221f016118aeb84850b97.dll
dc2e187d3b818b8feb5b041e4d3d9fb2.dll
ddbdeb1a290b56117ad8fa58dd1134d5.dll
ead249fbab5879aea60a50b9bd09d33d.dll
f1aaa747ef35cd9d7cd122638684172e.dll
f973edd0dd2693cdbb3dd630590f1d16.dll
mingwm10.dll
perl58.dll
wxbase28u_gcc_wxperl.dll
wxbase28u_net_gcc_wxperl.dll
wxbase28u_xml_gcc_wxperl.dll
wxmsw28u_adv_gcc_wxperl.dll
wxmsw28u_aui_gcc_wxperl.dll
wxmsw28u_core_gcc_wxperl.dll
wxmsw28u_gl_gcc_wxperl.dll
wxmsw28u_html_gcc_wxperl.dll
wxmsw28u_media_gcc_wxperl.dll
wxmsw28u_qa_gcc_wxperl.dll
wxmsw28u_richtext_gcc_wxperl.dll
wxmsw28u_stc_gcc_wxperl.dll
wxmsw28u_xrc_gcc_wxperl.dll

So far I have one app that exhibits this behavior, that I can't share
due to proprietary blah blah, and no clue how to even start producing a
minimal, sharable test case.  I exit my program by calling Close() on
the (only) main window, just like I do in my other wx applications, but
for some reason with this app, I get the error.

I see I neglected to mention that I am using Alien::Wx::Widgets
0.32.42.5, Wx 0.79.42.6, and Wx::Perl::Packager 0.10 with Perl 5.8.8,
build 819.

I'd appreciate any thoughts anyone has.

Thanks again,

--Mark Swayne

Mark Dootson wrote:

Hi,

Try using module 'Wx::Perl::Packager'

This should solve any problems you have with PerlApp.

Regards

Mark

Mark Swayne wrote:

I'm having problems with a bound application I wrote using wxperl with
perlapp. When I run my program through perlapp's "Test it" interface, I
get the error message "rmtree failed because directory is not empty."

When I check the temporary directory perlapp uses to cache its unpacked
file ins, I can see the wx dlls have not been deleted.  I gather that
this is happening because the wx dlls can't be deleted, because they
haven't been unloaded from memory yet.
Since this only happens with some of my perlapp projects, I have reason to hope that there is something I can do when I exit my script that will
help signal the OS that I am done with the dlls and they can be
unloaded.

Does anyone have any suggestions?

Thanks,

--Mark Swayne













Reply via email to