I am developing a GTK# mono application under openSuse, but I am interested in deploying it for all three platforms (Windows 7, Snow Leopard and as many Linux distributions as I can test on).
Deploying on Linux is not a problem as GTK# comes with the mono libraries, but for Windows I would not like to force the users to install GTK#. Is there a way to embed GTK# in the application, or at least integrate its installation with the installation of my program?
You may deploy GTK# applications without forcing users to install GTK# for .NET on Windows in a number of ways.
You may embed the entire Mono runtime (19 MB overhead) into your Application. Then there won't be any dependencies, your users won't even need to install .NET or MONO. Here's a Guide (I think Banshee uses this).
You may copy all the GTK# assemblies into your program directory. It isn't recommended however because you may run into a lot of problems if the user has another version of the Gtk runtime installed. (Yes GTK+ also needs a runtime).
You may integrate the GTK# installer with the Windows Installer of your application. (Then your users will be able to install both with a single click, no forcing). Many Installer programs can do this.
You may use a Package Management System.
You may use Deployment Management / Dependency Management Software, but this is expensive since all the good ones are propriety.
Though these workarounds can save trouble for your users, in the long run I recommend option 3
. It may prove worthwhile to have your users install GTK# because other workarounds may ultimately give more inconvenience to your users than a simple extra installation.