Why and when somebody would take out the Silverlight application out of browser and run? As this is feature provided in Silverlight 3.
When the application is useful enough that you want to use it often and you don't want to depend on a browser or an internet connection, for example.
In Silverlight 4, out of browser applications will make even more sense since they can run with elevated permissions and do things such as accessing the local filesystem or running applications on the client machine: http://silverlight.net/getstarted/silverlight-4-beta/#whatsnew (search For Trusted applications)
Related
We have a Silverlight 5 app, with in and out-of-browser versions. The out-of-browser version is used to provide elevated rights, where accesses to local resources are needed.
Now we are facing installing the out-of-browser app in typical hospital environments. Here we have first of all, centralized deployments through GPO or other mechanisms. The second thing is providing scriptable links to single sign-on platforms that usually replaces to normal desktop with a launchpad of services available to the user. Direct access to physical c-drive might also be prevented.
As we know, the normal desktop link for a OOB SL-app is an unique parameter for sllauncher.exe.
How do you start to support deployment and installation of your app in this scenario?
You can install your XAP as an Out-Of-Browser application using a script to invoke sllauncher like this:
"C:\Program Files (x86)\Microsoft Silverlight\sllauncher.exe"
/install:"C:\temp\MyApp.xap"
/origin:http://www.mysite.com/ClientBin/MyApp.xap
/shortcut:desktop+startmenu /overwrite
The XAP needs to be available locally for this to work. (I haven't tried it from a network share.)
Probably there are a lot of similar questions around, but since I know only few solutions to this which I am not sure will work for us, I am looking for something else, maybe new technologies...
What we have is this USB device which is not so fancy (of course, it requires a driver to be loaded), and it has couple of C++ dlls to help getting certain output from it. On top, we made a C# desktop application which makes use of the device in a more attractive way (plenty of interop inside).
So far so good, but to have the application lifted up to the web in order to gain more flexibility... What options are there?
Known solutions are:
1) ActiveX - kinda old technology and not cross-browser;
2) .Net 'applet' - not so common (is this even a solution?)
3) Java applet - well known, but JVM needed (since we went for C++ C#
maybe is out of scope);
4) Web service on the usb device itself - our device is very
light, we cannot have it there.
Are there other ways? Is Silverlight 4, 5 (maybe "out of browser") a feasable solution? What about these new technologies nowadays? Html 5 or something?
EDIT1: In particular I am interested in Silverlight. Is there a way using Silverlight?
EDIT2: I found this question: Can Silverlight access a .Net library that accesses a USB port? . What shall I understand from that? Is really Silverlight not a feasable solution for my scenario?
EDIT 3: VERY IMPORTANT!
These devices need to be used on customer side! People browsing must use them locally on their PCs!
Thanks in advance.
to have the application lifted up to the web [...]
Simple solution: Let the webserver (http server) run on the PC connected to the USB device, and use one of the webserver's interfaces like CGI to talk to your USB device. This way you need to code only a USB-to-CGI wrapper program, which can be C++ or C#.
Another way is to write a browser plugin.
The issue that you're going to face is that content in a browser is often run in a sandbox, in such a way that the web app does not have access to the computer. There are good reasons for this - security, primarily. One way to have some code running in the context of the computer is to have a browser plugin that can access the computer's hardware resources, but that can interact with browser content. Unfortunately, you may end up writing a different plugin for different browsers.
There do exist frameworks out there that make writing browser plugins more manageable. A simple search should turn up some of those candidates.
You can use Silverlight 5, it can give you access to your file system and USB storage device. If you want to get control for other USB device (printer, scanner, etc), you should give a device type. I know, Silverlight 5 works fine with a file system and web-cams...)
I need to provide a way of users uploading multiple files (can be 10MB each) over Mac, PC and a mobile device (something with an SD slot).
The connection from the mobile device can be poor so I need to enable queuing of the files so they can be delivered when connection becomes available.
I am looking at Silverlight as a potential option using something like this example uses and sending over the files when a connection is available.
http://www.microsoft.com/silverlight/out-of-browser/demo/
I have tried searching for silverlight articles but not found anything appropriate. What I am trying to avoid is writing multiple versions of the software for Mac+PC (browser) and mobile device.
Can silverlight provide this kind of functionality or is something I would have to approach differently?
Silverlight can be used to do that.
You don't need to use the out-of-browser functionality, silverlight gives you low-level control over sockets and threads.
For devices it's a different scenario, as AnthonyWJones points out.
There is a silverlight version for the nokia, but I've know idea if it is actively developed. The is also a c++ version for linux/meego, there is a mono version.
But all those are different versions.
WPF launches certain method which calls external exe and waits , and then accesses a file which was an output of external exe. Assuming I would build this application with a consideration of porting to Silverlight 4 later what should I do ?
In order to do this you would need to go through Silverlight's COM automation. I'm sure there's some out-of-process COM server that you could use to start a process. But at that point you've already
limited your application to Windows
require full trust
will only work in "out of browser" mode
At that point, you really gotta ask whether or not it makes any sense to port to Silverlight. WPF is particularly suitable for the above scenarios. You can use ClickOnce to achieve a similar (actually, superior) client update experience and you won't have to jump through hoops to do something as simple as spawning an external process.
I've become familiar with the new concept of "out of browser" web applications, supported in the recent Silverlight, JavaFX, Adobe AIR etc.
Listening recently to a podcast on the subject by Scott Hanselman, I've become aware that one of the purposes behind these new architectures is to allow for "desktop-application-feel". Also, I understand some (or all) of these allow for some offline access to a sandbox of resources. This really sounds as if these frameworks could be an alternative to "real" desktop applications, as long as the application does not require messing with the user's machine (i.e. access to peripherals, certain file IO, etc).
I have a very specific question. My application needs to run at start-up. Is it possible to do so using such a framework without requiring the user to download and run a certain executable?
For example, I could always direct the user to download a small EXE that will put a .lnk file in the start-up directory, but I want to avoid such a patch.
To summarize: is it possible to have an out-of-browser web application setup itself to run at start-up without requiring file download?
To further clarify, this question does not come from an "evil" place, but rather from trying to decide whether "out-of-browser" frameworks are indeed a proper alternative to a desktop application, for my specific requirements.
The BkMark example here shows how to start an application on startup using Adobe Air. So, yes it is possible.
So, here's the deal: web apps in general will have a security context around them, and by default won't have access to write to the filesystem (outside of a temp files), access the registry, etc.
One way is, as you said, have the user run something or configure it so the lnk is executed on startup.
Another way, and I think, more in line of what you want, is that the user can run the program himself, click some button in the application, and it's configured.
I know with Java you could do this, but the user has to allow full access to their system, because your app would need to change System configuration. Then you could just configure it (by writing a lnk to your WebStart JNLP in the Startup folder)
For Internet Exploder, Javascript apps do have write access to the disk.
For other (better-secured) browsers you will either need to have a download, or Adobe AIR.
Assuming you are building for Windows, launching an executable at startup can be done several ways.
For user session startup, you can achieve this either by putting a lnk file in the appropriate folder, or with a registry entry. For operating system startup, you can achieve this with a registry entry. There are several permutations:
run application once on boot (UI not allowed)
run application every boot (UI not allowed)
start service every boot according to policy set in registry
run application once on user session start
run application every user session
Since an out of browser application has UI I expect you mean run application every user session and in this case you may as well put an LNK file in the user's startup folder.
I just created a shortcut for an SL4 OOB application, and this was the Target of the shortcut:
"C:\Program Files (x86)\Microsoft Silverlight\sllauncher.exe" 2635882436.localhost
A search of my disk revealed that location 2635882436.localhost is a folder.
C:\Users\<mylogin>\AppData\LocalLow\Microsoft\Silverlight\OutOfBrowser\2635882436.localhost
I rather doubt an OOB app of any type could place a shortcut in the Startup folder unless you somehow obtained Full Trust.