Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Detect from browser if specific application is installed

We have an advanced webpage (ASP.NET, C#), and a application which needs to be installed on the client computer in order to utilize the webpage to its fullest. The application is a tray app, and has primarily two tasks. Detect when certain events happen on the webserver (for instance invited to a meeting, or notify of an upcoming meeting). The other task the trayapp has is to use a custom protocol (trayapp://) to perform some ajax calls back to the server.

One problem we have is how to determine if the application is installed on the local machine or not. Now the user has to tick a checkbox to inform the website that the application is installed, and that it's safe to call the trayapp:// url calls.

Is there any way, for instance through a JavaScript or similar to detect if our application is installed on the local machine?

The check needs to work for IE, FF and Opera browsers.

like image 672
Frode Lillerud Avatar asked Nov 14 '08 22:11

Frode Lillerud


People also ask

Can a website check if an app is installed?

Your website can check if your PWA is installed, even if the page is outside the scope of your PWA. For example, a landing page served from /landing/ can check if the PWA served from /pwa/ is installed, or if your landing page is served from www.example.com and your PWA is served from app.example.com .

How do I know if a program is installed?

Select Start > Settings > Apps. Apps can also be found on Start . The most used apps are at the top, followed by an alphabetical list.

Is an application that runs in a browser?

A web application (or web app) is application software that runs in a web browser, unlike software programs that run locally and natively on the operating system (OS) of the device. Web applications are delivered on the World Wide Web to users with an active network connection.

How do you tell if a program is installed for all users?

Right click All Programs and click All Users, and see if there are icons in the Programs folder.


4 Answers

When installing your client-side app you could modify the browser configuration to include another request header in HTTP requests and then have the server code look for that header, for example as a supported mime type using the following registry key (for Internet explorer)

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\
                                                      Internet Settings\Accepted Documents

I am not sure if Opera and FF use this same key, but they likely have similar configuration options, but this should at least get you on the right track.

like image 136
JohnFx Avatar answered Oct 05 '22 16:10

JohnFx


If you want to detect with javascript inside the browser, you can probably use the collection "navigator.plugins". It works with Firefox, Opera and Chrome but unfortunately not with IE.

Update: In FF, Opera and Chrome you can test it easily like this:

if (navigator.plugins["Adobe Acrobat"]) {
// do some stuff if it is installed
} else {
// do some other stuff if its not installed
}

Update #2: If it is an ActiveX object in IE you can test if it exists by using something like this:

function getActiveXObject(name){
        try{
            return new ActiveXObject(name);
        }
        catch(err){
            return undefined;
        }
};

Another approach for IE is something similar to what JohnFx suggested (I found it here and have not tested it):

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\Internet
Settings\User Agent\Post Platform
like image 32
some Avatar answered Oct 05 '22 15:10

some


Well the method that was mentioned by "some" is very common but there's also other methods for example if the application is listening locally on a port it can be detected from the browser which is very common for security solutions because have some sort of local proxy to filter the traffic. I actually made a video a while ago about using this technique to detect avast anti-virus you can watch it here:

https://www.youtube.com/watch?v=39_Nd8oiEAk

like image 25
Fady Mohamed Othman Avatar answered Oct 05 '22 16:10

Fady Mohamed Othman


Good idea from @JohnFx.

Another way to tackle this would be to install an ActiveX control or Browser plug-in with the trayapp installation. You could then access this in a similar way to that done when checking the version of Flash available.

like image 21
Brian Lyttle Avatar answered Oct 05 '22 15:10

Brian Lyttle