zoukankan      html  css  js  c++  java
  • C#卸载软件

    打开控制面板-程序和功能,里面能看到想要卸载的软件名称

    根据DisplayName就能找到UninstallString

    public static string GetProductGuid(string displayName)
    {
        string productGuid = string.Empty;
    
        string bit32 = @"SOFTWAREMicrosoftWindowsCurrentVersionUninstall";
        //注意 64位的程序还可能在: HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionUninstall
    
        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_MACHINESOFTWAREMicrosoftWindowsCurrentVersionUninstall 下面找到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 \troyISO_ISO oolsmsicreate.msi /qn /l*v msiexec_log.txt

    执行后软件自动装上,没有跳出任何安装界面,在和bat文件相同目录的位置出现日志。

    (2)/qb
    msiexec /i \troyISO_ISO oolsmsicreate.msi /qb /l*v msiexec_log.txt



    只跳出上图的安装界面,之后没有任何界面,期间无需用户操作,安装完全自动完成。

    (3)/qr
    msiexec /i \troyISO_ISO oolsmsicreate.msi /qr /l*v msiexec_log.txt



    只出现上面的界面,无需用户交互,安装自动完成

    (4)/qf
    msiexec /i \troyISO_ISO oolsmsicreate.msi /qf /l*v msiexec_log.txt



    出现上图,需要用户交互操作,才能完成安装。(默认的安装方式,和不加任何安装参数效果一样)

    (5)/qn+
    msiexec /i\troyISO_ISO oolsmsicreate.msi /qn+ /l*v msiexec_log.txt



    和/qn的区别是安装结束后会出现上图的成功安装对话框

    (6)/qb+
    msiexec /i \troyISO_ISO oolsmsicreate.msi /qb+ /l*v msiexec_log.txt





    和/qb之间的差别是在安装结束之后,会跳出安装成功的对话框。

    (7)/qb-
    msiexec /i\troyISO_ISO oolsmsicreate.msi /qb- /l*v msiexec_log.txt
    没看出和/qb之间的区别
    (8)/qb+-
    msiexec /i \troyISO_ISO oolsmsicreate.msi /qb+- /l*v msiexec_log.txt
    没看出和/qb+-之间的区别

    另外,在默认安装的时候只是针对当前用户的,而非admin的时候。如果要对所有用户的话,就要用到ALLUSERS=1,如:

    msiexec /i \troyISO_ISO oolsmsicreate.msi /qb+- /l*v msiexec_log.txt  ALLUSERS=1

  • 相关阅读:
    3--OC -- 点语法
    2--OC -- 类的创建与实例化
    1--OC -- HelloWorld
    tags,模板继承,组件,静态文件设置
    Django-过滤器的参数和语法
    Django- filter和simpletag,inclusion_tag的用法
    DjangoORM属性操作和models创建类语法
    Django项目的基础配置
    网络编程
    面试题
  • 原文地址:https://www.cnblogs.com/code1992/p/12557105.html
Copyright © 2011-2022 走看看