可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I am surprised I could not find this question already asked, so if I simply missed it please notify promptly.
I need to write a very small, fairly simple application in .NET that will be downloaded by end-consumers and installed on their system. Silverlight's sandbox model will not work - it has to be a full-on downloaded, installed executable.
Here's what I know:
- I've developed applications which run in a controlled desktop environment - for example, an IT app that runs on a hundred internal computers.
- I've developed applications using Mono
What I do not know:
- How to create a flexible, robust installer that will work on a myriad of uncontrolled desktop configurations and environments.
- How to do the same with Mono targeted for Mac OSX.
- What are the common issues in installing a widely-distributed end-user application and how to mitigate them?
I am looking for the best resources to fill in my knowledge gaps.
Related
Equivalent of a Windows Service on OSX with Mono
回答1:
For Windows, consider Windows Installer XML (WiX). For OSX, you need to generate a .app bundle. Here is an example using the nant tasks included with the Monobjc project.
Here are some of the major issues you will face:
On Windows:
- Your installer will have to detect
previous/old versions and
close/uninstall/migrate as
appropriate. Both NSIS and WiX have
mechanisms for this.
- Your installer/app will have to be
compatible with different versions of
Windows (XP, Vista, 7), and different
versions of .NET (2.0, 3.0, 3.5
eventually). Actually testing this is
one of the more tedious tasks you
face. I strongly recommend having a
handful of clean virtual machine
images around for this.
On OSX:
- You will most likely want to ship a standalone application bundle, meaning mono will be bundled within your .app. This will add ~50mb to your distributable.
- You will have to reference different versions of Monobjc to support OSX 10.4 and 10.5, you will need to configure your build to do this, as well as test both versions.
- Make sure that your c# code isn't using Windows/.NET specific calls by running the Mono Migration Analyzer (MoMA) on your codebase.
Upgrading:
You haven't mentioned how you plan to offer upgrades. NSIS and WiX have the capability to handle upgrades. Make sure you have your build versioning scheme worked out before your deploy the initial version. On OSX, Monobjc can integrate with Sparkle.
回答2:
There is bitrock, which handles your target platforms but costs money
回答3:
http://www.openlina.com/
They deliver on the build once, run anywhere promise.
回答4:
This may or may not be the answer you are looking for. If your application can survive in the Silverlight sand box, you may want to explore Silverlight 3.0.
Silverlight 3 allows your application to run outside of the browser on Windows and Mac.
Here's an example of setting it up:
http://www.silverlightshow.net/items/Silverlight-3-as-a-Desktop-Application-Out-of-Browser-Applications.aspx
回答5:
To create an installer there is:
- NSIS - Free
- InstallShield - Paid
I do not know how know about Macs
Issues: Computer does not have .Net Framework
Solution: StackOverflow - The State of Linkers for .NET apps
回答6:
You could try BitRock's InstallBuilder. From their website:
BitRock InstallBuilder is a
development tool for building
crossplatform installers for desktop
and server software. With
InstallBuilder, you can quickly create
professional installers for Linux,
Windows, Mac OS X, Solaris and other
platforms from a single project file
and build environment.
回答7:
What you want is InstallAnywhere. It allows you to target multiple platforms with one installer project. It will help with dependencies and platform specific issues.
I've used it on LINUX/BSD/Windows deployment, and it worked beautifully. If you had X-windows, you got a GUI, if not a command line install. Windows installer worked with standard windows installer tech, and looked like a professional installer. It supports mac OS X as well. I highly recommend this software it does exactly what you want.
回答8:
As other posters mentioned, BitRock InstallBuilder supports your target platforms of Windows, Linux and Mac. I want to add that it has been used by the Mono project itself for a while to distribute all-in-one binary installer for Mono runtime. It is also used by other successful Mono-based ISVs like Codice Software