PDA

View Full Version : uninstall کردن یک applicationx توسط نام آن Application



Death Ghost
یک شنبه 17 اسفند 1393, 11:09 صبح
سلام دوستان کسی می دونه برای uninstall کردن یک application با استفاده از نام آن appliaction باید چی کار کنم ؟
اگه کسی می دونه ممنون میشم راهنماییم کنه .

Death Ghost
یک شنبه 17 اسفند 1393, 13:41 عصر
دوستان این مشکل را هم حل کردم دنو تا تابع می زارم اولیش میبینه که application مورد نظر شما install شده یا نه و دومیش اونو uninstall می کنه

// this function return true if "Company Wizard" was installed in user's computer or false if it wasn't;
public static bool GetInstalledApps(string ProgramName)
{
// create a list to add all of installed application
List<string> appList = new List<string>();
// set the registry key that has been set for this application on uninstallKey string
string uninstallKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstal l";
// create a registry key to open uninstallKey and set it to rk
using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(uninstallKey))
{
// give name of all of elemnet in rk and set it to skName
foreach (string skName in rk.GetSubKeyNames())
{
// create a registry key to open skName and set it to sk
using (RegistryKey sk = rk.OpenSubKey(skName))
{
try
{
// add application name to list
appList.Add((sk.GetValue("DisplayName")).ToString());
}
catch (Exception ex)
{ }
}
}
}
// if aour purpose appliaction was in list
if (appList.Contains(ProgramName))
{
return true;
}
// if it wasn't
else
{
return false;
}
}


// this function unindtall "Company Wizard" form user computer and act when user during installation "welcome... " cancel installation
private bool UninstallProgram(string ProgramName)
{
try
{
// find all of installed application
ManagementObjectSearcher mos = new ManagementObjectSearcher(
"SELECT * FROM Win32_Product WHERE Name = '" + ProgramName + "'");
// for all of them if it's name was equal to our application name Uninstall it
foreach (ManagementObject mo in mos.Get())
{
try
{
if (mo["Name"].ToString() == ProgramName)
{
object hr = mo.InvokeMethod("Uninstall", null);
return (bool)hr;
}
}
catch (Exception ex)
{
//this program may not have a name property, so an exception will be thrown
}
}

//was not found...
return false;

}
catch (Exception ex)
{
return false;
}
}


اگه بدردتون خورد تشکر شما باعث دلگرمی منه

nasrin55
جمعه 22 اسفند 1393, 20:42 عصر
یعنی از ذاخل نرم افزار، این دو تابع رو صدا می زنید که خودش رو unistall کنه؟

Death Ghost
یک شنبه 24 اسفند 1393, 10:43 صبح
بله
همانطور که در
http://barnamenevis.org/showthread.php?487595-%D9%BE%D8%A7%DA%A9-%DA%A9%D8%B1%D8%AF%D9%86-%D8%AF%D8%A7%D8%AF%D9%87-%D9%87%D8%A7%DB%8C-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%85%D9%88%D9%82%D8%B9-uninstall
توضیح دادم برای این کار من نیزا به استفاده از دو تا registry key داشتم
یکی برای نگه داری محل نصب برنامه و دیگری هم برای نگه داری محل control panel list .
نمی گم نمیشه ولی من هر کاری که کردم نتونستم این دو تا کار رو در یک registry key انجام بدم چونکه موقع خوندن محل ذخیره سازی در حافظه به من null بر می گردوند. پس
برا یuinstall کردن کی برنامه باید اول دید که در لیست control panel هست یا نه که تابع اولی این کار رو می کنه و برای حذف آن برنامه از control panel list باید از تابع دوم استفاده بشه و برای حذف آن از محل ذخیره سازی کافی است که محل نگه داری رو که از registry key دیگر بدست می آورید را به یک directory info داده و اونو delete کنید. بازم اگه سوالی بود خوشحال میشم کمکی کنم