代码
if (rkLocalMachine != null)
{
rkUninstalls = rkLocalMachine.OpenSubKey(STRBIT32); // Uninstall Gen build from 32bit WinOS.
public void UninstallGenWFM()
{
string strReturnMsg;
string productGuid;
string subKey;
string displayName;
string strMajVersion;
string strGenBuildNum;
string strLocalInsFolder;
string uninstallCmd;
string strUnistallCmdLine;
strUnistallCmdLine = uninstallCmd = strLocalInsFolder = strMajVersion = displayName = subKey = productGuid = strReturnMsg = string.Empty;
{
string strReturnMsg;
string productGuid;
string subKey;
string displayName;
string strMajVersion;
string strGenBuildNum;
string strLocalInsFolder;
string uninstallCmd;
string strUnistallCmdLine;
strUnistallCmdLine = uninstallCmd = strLocalInsFolder = strMajVersion = displayName = subKey = productGuid = strReturnMsg = string.Empty;
public const string STRBIT32 = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall";
public const string STRBIT64 = "SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall";
if (rkLocalMachine != null)
{
rkUninstalls = rkLocalMachine.OpenSubKey(STRBIT32); // Uninstall Gen build from 32bit WinOS.
uninstallKeys = rkUninstalls.GetSubKeyNames(); // Get all install keys.
foreach (string uninstallKey in uninstallKeys)
{
if (uninstallKey.Length > 14)
{
string installShield = uninstallKey.Substring(0, 14);
if (installShield == "InstallShield_") // If it is a shield key.
{
productGuid = uninstallKey.Substring(14); // Get the pid.
subKey = strKeyCurrent + "\\" + uninstallKey;
RegistryKey rkUninstallKey = rkLocalMachine.OpenSubKey(subKey); // Open subkey list in regist.
if (rkUninstallKey != null)
{
//Geneva Workflow Manager for ACA
displayName = (String)rkUninstallKey.GetValue("DisplayName", String.Empty);
if (displayName.Length >= 25 && displayName.Substring(0, 31) == "Geneva Workflow Manager for ACA")
{
string displayVersion = (String)rkUninstallKey.GetValue("DisplayVersion", String.Empty);
strReturnMsg = "Found installed product: " + displayName + ", Version: " + displayVersion + "+";
// Write to log file.
oLOG.WRITELOG(strReturnMsg);
strMajVersion = this.strGenVersion.Substring(0, 5);
if (displayVersion != strMajVersion)
{
uninstallCommand = (String)rkUninstallKey.GetValue("UninstallString", String.Empty);
strReturnMsg = "+++++Prepare to uninstall this build !+";
// Write to log file.
oLOG.WRITELOG(strReturnMsg);
}
}
}
}
}
}
if (uninstallCommand != string.Empty)
{
try
{
strGenBuildNum = this.strGenVersion.Substring(6, 4); // Get the Geneva application build number.
strGenVersion = strGenVersion.Replace(".", "_");
string copyLocalFolder = "copyLocalFolder";
string uninstallLogFile = Path.Combine(copyLocalFolder, "uninstall_" + this.strGenVersion + ".txt");
int iFindCommand = uninstallCommand.IndexOf("-runfromtemp");
uninstallCmd = uninstallCommand.Substring(0, iFindCommand - 1);
strUnistallCmdLine = uninstallCommand.Substring(iFindCommand);
strUnistallCmdLine = (" /uninst /verbose\"" + uninstallLogFile);
string issfile = Path.Combine(copyLocalFolder, "uninstall.iss");
Process pUninstall = new Process();
pUninstall.StartInfo.FileName = uninstallCmd;
pUninstall.StartInfo.Arguments = strUnistallCmdLine;
EventLog.WriteEntry("A1", uninstallCmd);
EventLog.WriteEntry("A2", strUnistallCmdLine);
pUninstall.Start();
pUninstall.WaitForExit();
}
catch (Exception xe)
{
strReturnMsg = " Has an Error !" + xe.Message + "+";
// Write to log file.
oLOG.WRITELOG(strReturnMsg);
}
}
else {
strReturnMsg = " No Geneva Application be installed ! +";
// Write to log file.
oLOG.WRITELOG(strReturnMsg);
}
}
else
{
strReturnMsg = "Can not get the regedit message from server! +";
// Write to log file.
oLOG.WRITELOG(strReturnMsg);
}
Console.WriteLine(strReturnMsg);
}
{
if (uninstallKey.Length > 14)
{
string installShield = uninstallKey.Substring(0, 14);
if (installShield == "InstallShield_") // If it is a shield key.
{
productGuid = uninstallKey.Substring(14); // Get the pid.
subKey = strKeyCurrent + "\\" + uninstallKey;
RegistryKey rkUninstallKey = rkLocalMachine.OpenSubKey(subKey); // Open subkey list in regist.
if (rkUninstallKey != null)
{
//Geneva Workflow Manager for ACA
displayName = (String)rkUninstallKey.GetValue("DisplayName", String.Empty);
if (displayName.Length >= 25 && displayName.Substring(0, 31) == "Geneva Workflow Manager for ACA")
{
string displayVersion = (String)rkUninstallKey.GetValue("DisplayVersion", String.Empty);
strReturnMsg = "Found installed product: " + displayName + ", Version: " + displayVersion + "+";
// Write to log file.
oLOG.WRITELOG(strReturnMsg);
strMajVersion = this.strGenVersion.Substring(0, 5);
if (displayVersion != strMajVersion)
{
uninstallCommand = (String)rkUninstallKey.GetValue("UninstallString", String.Empty);
strReturnMsg = "+++++Prepare to uninstall this build !+";
// Write to log file.
oLOG.WRITELOG(strReturnMsg);
}
}
}
}
}
}
if (uninstallCommand != string.Empty)
{
try
{
strGenBuildNum = this.strGenVersion.Substring(6, 4); // Get the Geneva application build number.
strGenVersion = strGenVersion.Replace(".", "_");
string copyLocalFolder = "copyLocalFolder";
string uninstallLogFile = Path.Combine(copyLocalFolder, "uninstall_" + this.strGenVersion + ".txt");
int iFindCommand = uninstallCommand.IndexOf("-runfromtemp");
uninstallCmd = uninstallCommand.Substring(0, iFindCommand - 1);
strUnistallCmdLine = uninstallCommand.Substring(iFindCommand);
strUnistallCmdLine = (" /uninst /verbose\"" + uninstallLogFile);
string issfile = Path.Combine(copyLocalFolder, "uninstall.iss");
Process pUninstall = new Process();
pUninstall.StartInfo.FileName = uninstallCmd;
pUninstall.StartInfo.Arguments = strUnistallCmdLine;
EventLog.WriteEntry("A1", uninstallCmd);
EventLog.WriteEntry("A2", strUnistallCmdLine);
pUninstall.Start();
pUninstall.WaitForExit();
}
catch (Exception xe)
{
strReturnMsg = " Has an Error !" + xe.Message + "+";
// Write to log file.
oLOG.WRITELOG(strReturnMsg);
}
}
else {
strReturnMsg = " No Geneva Application be installed ! +";
// Write to log file.
oLOG.WRITELOG(strReturnMsg);
}
}
else
{
strReturnMsg = "Can not get the regedit message from server! +";
// Write to log file.
oLOG.WRITELOG(strReturnMsg);
}
Console.WriteLine(strReturnMsg);
}