operating system - get installed version of an application using c# -


i installed version of application (say, myapp) using c#. much, 1. create 'set up' myapp of version 5.6 2. install myapp.

i create application (say versiontracker)to version of installed applications. if pass name 'myapp' version '5.6'. if application adobe reader installed in system, want version of adobe reader if pass 'adobe reader'.

i need know how build 'versiontracker'

the first , important thing not applications save version somewhere in system. honest, few of them that. place should windows registry. of installed applications put installation data following place:

hkey_local_machine\software\microsoft\windows\currentversion\uninstall 

however, it's not easy - on 64bit windows, 32bit (x86) applications save installation data key, is:

hkey_local_machine\software\wow6432node\microsoft\windows\currentversion\uninstall 

in these keys there many keys, of them have got "easy-readable" name, such google chrome, of them got names such {63e5cdbf-8214-4f03-84f8-cd3ce48639ad}. must parse these keys application , start looking application names. there in displayname value, it's not true. version of application in displayversion value, installers use values, such inno setup: setup version, ... application have version written in name, it's possible application version in displayname value.

note: it's not easy parse these registry keys , values , "pick" correct values. not installers save application data these keys, of them not save application version there, etcetera. however, it's usual application use these registry keys. [source: stackoverflow: detecting installed programs via registry, browsing own registry]

alright, when know should look, have program in c#. won't write application you, i'll tell classes should use , how to. first, need these:

using system; using microsoft.win32;       

to hkey_local_machine, create registrykey this:

registrykey baseregistrykey = registry.localmachine; 

now need define subkeys:

string subkey = "software\\microsoft\\windows\\currentversion\\uninstall"; // or "software\\wow6432node\\microsoft\\windows\\currentversion\\uninstall" 

now need go subkey, create new registrykey:

registrykey uninstallkey = baseregistrykey.opensubkey(subkey); 

now need go thru subkeys there, first names of subkeys:

string[] allapplications = uninstallkey.getsubkeynames(); 

now you must go thru subkeys yourself, 1 one, creating new registry key (you don't have to, i'll it):

registrykey appkey = baseregistrykey.opensubkey(subkey + "\\" + applicationsubkeyname); 

where applicationsubkeyname name of subkey you're checking. recommend foreach statement, helps (you must have experience c# already, i'm not going tell how use foreach here).

now check application's name , compare name of desired application (you cannot rely on subkey name, because, said, can called example {63e5cdbf-8214-4f03-84f8-cd3ce48639ad}, must check name here):

string appname = (string)appkey.getvalue("displayname"); 

if it's correct application (you must check yourself), find version:

string appversion = (string)appkey.getvalue("displayversion"); 

et voilĂ , have version. @ least there's 60 - 80% chance have...

remember! if key or value doesn't exist, method returns null. remember check if returned value null everytime, otherwise application crash.

where find more? the code project: read, write , delete registry c#

i hope helped you. , if wanted know else , didn't understand question, then, please, ask better next time. :)


Comments

Popular posts from this blog

c# - SharpSVN - How to get the previous revision? -

c++ - Is it possible to compile a VST on linux? -

url - Querystring manipulation of email Address in PHP -