|
dev
newsgroups
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
optional features for application?I am currently developing an application in C# which is basically a frontend for a database in a small company but also provides additional features like interaction with MS Outlook and Adobe Indesign via COM Interop Assemblies. Since Outlook 2003 is installed on every single machine in the company there is no problem referencing Outlook from the main assembly i.e. the application. But Adobe Indesign is only installed on certain machines (the ones in the graphics office). What is the best way to deal with such a situation? I had some ideas how it might look like in the application: One idea was that the interaction feature should be accessible from an entry in the main menu of the application. Is there a way to test from within the application whether the required interop assemblies as well as Indesign are installed and tell the user that the feature is not accessible if they are not found? Another idea was to put the indesign interaction into a seperate module/assembly and let the user distinguish whether he wants to install the feature. To install the feature, a test during install time would be needed to check whether Indesign and the required Interop assemblies are installed. If the feature is successfully installed, there should be a menu item in the in the main menu to access the indesign functionality. But this menu item should only be there if the feature is installed. The second idea is the one I like better, but to be honest, I don't know how to implement any of both ideas. I have searched for information how to include optional features in an application and giving the user the choice at install time whether the optional feature should be installed. But I have not found any information so far. How can this be handled with Visual Studio and setup projects? If anyone out there knows some webpages which could help me or if anyone has some hints where to start please let me know. Regards Stephan Stephan Zaubzer <stephan.zaub***@schendl.at> wrote in news:ekZLYpQgGHA.2476
@TK2MSFTNGP03.phx.gbl: > I am currently developing an application in C# which is basically a Build a plug-in application - each feature is built as a plugin. That way > frontend for a database in a small company but also provides additional > features like interaction with MS Outlook and Adobe Indesign via COM > Interop Assemblies. Since Outlook 2003 is installed on every single > machine in the company there is no problem referencing Outlook from the > main assembly i.e. the application. > But Adobe Indesign is only installed on certain machines (the ones in > the graphics office). What is the best way to deal with such a > situation? I had some ideas how it might look like in the application: you can deploy certain components on certain machines. Plugin applications are very easy to build in .NET - lots of examples on Google. Or if you want to deploy all features, but only disable certain features on machine with non-matching software, you can try to create the COM object interface but place it in try/catch statement. If the object cannot be instantiated, probably means the software is not loaded on the computer and then you'll disable the function. Thanks for your help. I think I will try it with a plug-in application.
By the way: How do all these MS Applications deal with this problem (I know, they are not built in .net). Is the spell checker written as a plug-in for word? How do the big software developers split their apps up in several features? Regards Stephan Spam Catcher wrote: Show quote > Stephan Zaubzer <stephan.zaub***@schendl.at> wrote in news:ekZLYpQgGHA.2476 > @TK2MSFTNGP03.phx.gbl: > >> I am currently developing an application in C# which is basically a >> frontend for a database in a small company but also provides additional >> features like interaction with MS Outlook and Adobe Indesign via COM >> Interop Assemblies. Since Outlook 2003 is installed on every single >> machine in the company there is no problem referencing Outlook from the >> main assembly i.e. the application. >> But Adobe Indesign is only installed on certain machines (the ones in >> the graphics office). What is the best way to deal with such a >> situation? I had some ideas how it might look like in the application: > > Build a plug-in application - each feature is built as a plugin. That way > you can deploy certain components on certain machines. Plugin applications > are very easy to build in .NET - lots of examples on Google. > > Or if you want to deploy all features, but only disable certain features on > machine with non-matching software, you can try to create the COM object > interface but place it in try/catch statement. If the object cannot be > instantiated, probably means the software is not loaded on the computer and > then you'll disable the function. In deployment terms, they split their apps into features by using a tool
that can build an MSI file with features. Visual Studio setup projects don't allow you to split components into features. There's a comparison here, right at the end: http://www.installsite.org/pages/en/msi/authoring.htm where it notes that "Full control of features" is pretty standard except in Visual Studio 2005. There seems to be an expectation that Visual Studio setup projects can do the same things as 3rd party tools like InstallShield, Wise, Advanced Installer, Wix etc, and I don't know where that idea comes from. http://ablog.apress.com/?p=868 -- Show quotePhil Wilson [MVP Windows Installer] ---- "Stephan Zaubzer" <stephan.zaub***@schendl.at> wrote in message news:%23PSTEpXgGHA.4464@TK2MSFTNGP04.phx.gbl... > Thanks for your help. I think I will try it with a plug-in application. > > By the way: How do all these MS Applications deal with this problem (I > know, they are not built in .net). Is the spell checker written as a > plug-in for word? How do the big software developers split their apps up > in several features? > > Regards > Stephan > > Spam Catcher wrote: >> Stephan Zaubzer <stephan.zaub***@schendl.at> wrote in >> news:ekZLYpQgGHA.2476 >> @TK2MSFTNGP03.phx.gbl: >> >>> I am currently developing an application in C# which is basically a >>> frontend for a database in a small company but also provides additional >>> features like interaction with MS Outlook and Adobe Indesign via COM >>> Interop Assemblies. Since Outlook 2003 is installed on every single >>> machine in the company there is no problem referencing Outlook from the >>> main assembly i.e. the application. >>> But Adobe Indesign is only installed on certain machines (the ones in >>> the graphics office). What is the best way to deal with such a >>> situation? I had some ideas how it might look like in the application: >> >> Build a plug-in application - each feature is built as a plugin. That way >> you can deploy certain components on certain machines. Plugin >> applications are very easy to build in .NET - lots of examples on Google. >> >> Or if you want to deploy all features, but only disable certain features >> on machine with non-matching software, you can try to create the COM >> object interface but place it in try/catch statement. If the object >> cannot be instantiated, probably means the software is not loaded on the >> computer and then you'll disable the function. |
|||||||||||||||||||||||