第一和最重要的一點是,並非所有應用程序都保存在某個地方的版本在系統中。說實話,只有少數人這樣做。你應該看的地方是Windows註冊表。大多數安裝的應用程序把他們安裝數據分爲以下地方:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
然而,這並不容易 - 在64位Windows,32位(x86)的應用程序的安裝數據保存到另外一個關鍵,那就是:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
在這些鍵有很多鍵,其中一些已經得到「易可讀」的名字,如Google Chrome
,他們中的一些有名稱,如{63E5CDBF-8214-4F03-84F8-CD3CE48639AD}
。您必須將所有這些密鑰解析到您的應用程序中,並開始尋找應用程序名稱。價值通常在DisplayName
,但並非總是如此。該應用程序的版本通常在DisplayVersion
的值中,但某些安裝程序確實使用其他值,例如Inno Setup: Setup Version
,...某些應用程序的名稱中寫入了其版本,因此應用程序版本可能已在DisplayName
值。
注意:解析所有這些註冊表項和值並「挑選」正確的值並不容易。並非所有安裝程序都將應用程序數據保存到這些密鑰中,其中一些安裝程序不會將應用程序版本保存在那裏,等等。但是,通常應用程序使用這些註冊表項。 [來源:StackOverflow: Detecting installed programs via registry,瀏覽我自己的註冊表]
好的,所以現在當你知道你應該看的地方時,你必須用C#編寫它。我不會爲你寫應用程序,但我會告訴你應該使用哪些類以及如何使用。首先,你需要這些:
using System;
using Microsoft.Win32;
爲了讓您HKEY_LOCAL_MACHINE
,創建一個RegistryKey
這樣的:
RegistryKey baseRegistryKey = Registry.LocalMachine;
現在,您需要定義子項:
string subKey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall";
// or "SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall"
現在,您需要轉到子項,所以創建一個新的RegistryKey
:
RegistryKey uninstallKey = baseRegistryKey.OpenSubKey(subKey);
現在,你需要去通所有在那裏的子項,所以首先我們得到的所有子項的名稱:
string[] allApplications = uninstallKey.GetSubKeyNames();
現在你必須直通所有子自己,一個接一個通過創建一個新的註冊表項(你沒有,但我會做到這一點):
RegistryKey appKey = baseRegistryKey.OpenSubKey(subKey + "\\" + applicationSubKeyName);
其中applicationSubKeyName
是您目前檢查子項的名稱。我推薦foreach
聲明,它可以幫助你(但你必須有一些C#的經驗,我不會告訴你如何在這裏使用foreach
)。
現在檢查應用程序的名稱並將其與您想要的應用程序的名稱進行比較(不能依賴子項名稱,因爲正如我已經說過的,它們可以調用例如{63E5CDBF-8214-4F03-84F8-CD3CE48639AD}
,因此您必須在此檢查名稱) :
string appName = (string)appKey.GetValue("DisplayName");
如果這是正確的應用程序(你必須檢查它自己),找到的版本:
string appVersion = (string)appKey.GetValue("DisplayVersion");
的Et瞧,你擁有的版本。至少有60-80%的機會你有...
記住!如果某個鍵或值不存在,則該方法返回null
。請記住檢查每次返回的值是否爲空,否則應用程序將崩潰。
哪裏可以找到更多? The Code Project: Read, write and delete from registry with C#
我真的很希望我幫你。如果你想知道其他的東西,但是我不明白你的問題,那麼請下次再提問。 :)
我們需要更多的細節。你在用什麼工具,你到底想要做什麼,你嘗試過什麼? –
我同意。這個問題非常模糊。換句話說,跆拳道你在說什麼? –
您將名稱「MyApp」傳遞到哪裏?在應用程序本身?在Windows的其他部分?你把這個名字放在哪裏?一些搜索? –