Hi,
This is just me sticking my nose in but this highlights a very common problem and that is falling back on Operating System functionality. In that when the operating system changes the application stops working. One of the reasons for managed code is to stop this from happening. Fully managed third party components are excellent for the reason that if the operating system changes then the fully managed component will still work. If you need something that is not native to .NET and you have a choice between dropping into the operating system or using a free managed component then I'd use the free component (as long as it is fully managed and doesn't itself call into the operating system) or at least think very carefully before using the operating systems features.
The poster formally known as spidermans dark side also demonstrates another good approach around the problem here and that is you can find a command line tool (is pkzip still about) then you can run the tool using the Process object from within your code, with some settings changed so that the black box doesn't appear. This actually has a few advantages, especially if the tool is your own, in that you can update your application without recompiling it if, and it depends, you update the tool. We have used this approach to interop between VB.NET and Fortran. Fortran compiles to an exe and the VB.NET code calls the exe using command line options.