C#卸載軟件


打開控制面板-程序和功能,里面能看到想要卸載的軟件名稱

 

根據DisplayName就能找到UninstallString

 

public static string GetProductGuid(string displayName)
{
    string productGuid = string.Empty;

    string bit32 = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
    //注意 64位的程序還可能在: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\

    RegistryKey localMachine = Registry.LocalMachine;
    RegistryKey unistall = localMachine.OpenSubKey(bit32, true);

    var subNames = unistall.GetSubKeyNames();

    foreach (string subkey in subNames)
    {
        RegistryKey product = unistall.OpenSubKey(subkey);
        try
        {
            if (product.GetValueNames().Any(n => n == "DisplayName") == true)
            {
                string tempDisplayName = product.GetValue("DisplayName").ToString();
                if (tempDisplayName == displayName && product.GetValueNames().Any(n => n == "UninstallString") == true)
                {
                    var unitstallStr = product.GetValue("UninstallString").ToString();
                    
                    //注意:如果不包含MsiExec,可以返回unitstallStr   
                    if (unitstallStr.Contains("MsiExec.exe"))
                    {
                        string[] strs = unitstallStr.Split(new char[2] { '{', '}' });
                        productGuid = strs[1];
                        break;
                    }
                }
            }
        }
        catch
        {
            return string.Empty;
        }
    }

    return productGuid;
}

 

如果找不到,就要手動在注冊表  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 下面找到DisplayName和卸載字符串

 

 

卸載

Process p = new Process();
p.StartInfo.FileName = "msiexec.exe";
//用 /i 替換 /x 就不會彈出提示框 “您確定要卸載此產品嗎?”
p.StartInfo.Arguments = "/x {72D96FC3-7E2F-448B-86DA-4CB1C8882407}";

p.Start(); 

 

Process p = new Process();
p.StartInfo.FileName=@"C:\Program Files (x86)\InstallShield Installation Information\{05B77F59-5655-4E62-8139-BD9E400D8D15}\setup.exe" ;
p.StartInfo.Arguments=" -runfromtemp -l0x0409  -removeonly";
p.Start(); 

 

 

 

當我們把  HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Uninstall  中的所有注冊表項都瀏覽一遍后,發現在控制面板的“添加刪除程序”列表中的應用程序好像並沒有全部顯示在這里,例如我們常用的 Office 系列就找不到相應的注冊表項。這是怎么回事呢?
    原來,還有其它兩個注冊表項用來保存已注冊的應用程序信息,它們就是  HKEY_CLASSES_ROOT/Installer/Products  和  HKEY_CURRENT_USER/Software/Microsoft/Installer/Products 。如果我們把這三個注冊表項定義的全部應用程序都加在一起,就是我們在“添加刪除程序”列表中看到的所有程序了。
     HKEY_CLASSES_ROOT/Installer/Products  和  HKEY_CURRENT_USER/Software/Microsoft/Installer/Products  主要用來保存那些基於 Windows Installer 安裝的應用程序,例如 Office;而  HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Uninstall  則主要用來保存那些基於其它安裝程序的應用程序,例如常見的基於 InstallShield 安裝的應用程序。

 

 

 

 

 

 

msiexec安裝參數詳解

1 安裝

/i表示安裝,/x 表示卸載/f表示修復。/l*v 表示輸出詳細日志
安裝參數有
/qn 無用戶界面;/qb 基本界面; /qr 精簡界面;/qf 完整界面(默認值)

/q 設置 UI 級別。
q、qn - 沒有 UI。
qb 基本 UI。
qr 簡化的 UI。 在安裝結束時顯示 一個模式對話框。
qf 完整 UI。在安裝結束時顯示 一個模式對話框。
qn+ 沒有 UI。但是,在安裝結束時顯示一個模式對話框。
qb+ 基本 UI。在安裝結束時顯示一個模式對話框。如果取消安裝,將不顯示模式對話框。
qb- 不帶模式對話框的基本 UI。
qb+-開關不是一個受支持的 UI 級別。

下面以安裝msicreate.msi為例

(1)/qn
msiexec /i \\troy\ISO_ISO\tools\msicreate.msi /qn /l*v msiexec_log.txt

 

 

執行后軟件自動裝上,沒有跳出任何安裝界面,在和bat文件相同目錄的位置出現日志。

(2)/qb
msiexec /i \\troy\ISO_ISO\tools\msicreate.msi /qb /l*v msiexec_log.txt



只跳出上圖的安裝界面,之后沒有任何界面,期間無需用戶操作,安裝完全自動完成。

(3)/qr
msiexec /i \\troy\ISO_ISO\tools\msicreate.msi /qr /l*v msiexec_log.txt



只出現上面的界面,無需用戶交互,安裝自動完成

(4)/qf
msiexec /i \\troy\ISO_ISO\tools\msicreate.msi /qf /l*v msiexec_log.txt



出現上圖,需要用戶交互操作,才能完成安裝。(默認的安裝方式,和不加任何安裝參數效果一樣)

(5)/qn+
msiexec /i\\troy\ISO_ISO\tools\msicreate.msi /qn+ /l*v msiexec_log.txt



和/qn的區別是安裝結束后會出現上圖的成功安裝對話框

(6)/qb+
msiexec /i \\troy\ISO_ISO\tools\msicreate.msi /qb+ /l*v msiexec_log.txt





和/qb之間的差別是在安裝結束之后,會跳出安裝成功的對話框。

(7)/qb-
msiexec /i\\troy\ISO_ISO\tools\msicreate.msi /qb- /l*v msiexec_log.txt
沒看出和/qb之間的區別
(8)/qb+-
msiexec /i \\troy\ISO_ISO\tools\msicreate.msi /qb+- /l*v msiexec_log.txt
沒看出和/qb+-之間的區別

另外,在默認安裝的時候只是針對當前用戶的,而非admin的時候。如果要對所有用戶的話,就要用到ALLUSERS=1,如:

msiexec /i \\troy\ISO_ISO\tools\msicreate.msi /qb+- /l*v msiexec_log.txt  ALLUSERS=1

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM