zoukankan      html  css  js  c++  java
  • MSIUninstaller.exe(控制台应用程序)

    下载演示项目- 6.26 KB MSIUninstaller_bin 介绍 我有一个问题,我必须周期性地将网络上的许多机器回滚到我们的软件的较旧版本(以MSI包的形式分发)。因此,我做了一个简单的控制台应用程序,可以运行从BAT脚本或类似。它允许我卸载计算机上的MSI包,即使我不知道当前安装在计算机上的是哪个版本。而且,如果已经安装了正确的(旧版本),我可以跳过卸载包。 使用的代码 MSIUninstaller.exe调用microsoftmsiexec.exe来处理MSI包的实际卸载。它在HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionUninstall下的注册表数据库中查找所有已安装的包。然后循环遍历它们以找到与特定输入参数匹配的包,然后卸载它们。该程序允许您指定输入参数,如安静、日志和通配符。 这个函数显示了程序的主要功能: 隐藏,收缩,复制Code

    Sub Process(ByVal DisplayName As String, ByVal bUninstall As Boolean, _
    ByVal bDisplay As Boolean, ByVal bQuiet As Boolean, ByVal bLog As Boolean, _
    ByVal strSkip As String)
    
        ' Retrieve all the subkeys for the specified key.
        Dim names As String() = m_rKey.GetSubKeyNames
        Dim version As String = ""
        Dim publisher As String = ""
        Dim dispName As String = ""
        Dim iFound As Integer
    
        For Each s As String In names
            dispName = GetKeyValue(s, "DisplayName")
            If dispName <> "" Then
                If WildCardCompare(dispName, DisplayName) Then
                    version = GetKeyValue(s, "DisplayVersion")
                    publisher = GetKeyValue(s, "Publisher")
                    If strSkip <> "none" And WildCardCompare(version, strSkip) Then
                        Continue For
                    End If
                    Dim cmd As String = Environment.SystemDirectory.ToString + _
                    "MsiExec.exe /x " + s
                    If bQuiet Then
                        cmd += " /qn"
                    End If
                    If bLog Then
                        cmd += " /lie+c:MSIUninstaller.log.txt"
                    End If
                    If Not bDisplay Then
                        Console.WriteLine("Publisher       = " + publisher)
                        Console.WriteLine("DisplayName     = " + dispName)
                        Console.WriteLine("version         = " + version)
                        Console.WriteLine("GUID            = " + s)
                        Console.WriteLine("EsitmatedSize   = " + (CDbl(GetKeyValue_
            (s, "EstimatedSize")) / 1024).ToString("N2") + " Mb")
                        Dim dato As String = GetKeyValue(s, "InstallDate")
                        dato = dato.Substring(6) + "-" + dato.Substring(4, 2) + _
                        "-" + dato.Substring(0, 4)
                        Console.WriteLine("InstallDate     = " + CDate(dato).ToString_
                            ("dd-MMM-yyy"))
                        Console.WriteLine("InstallSource   = " + GetKeyValue_
                        (s, "InstallSource") + vbLf)
                    End If
                    If bUninstall Then
                        Shell(cmd)
                    End If
                    iFound += 1
                End If
            End If
        Next s
        If Not bQuiet And iFound = 0 Then
            Console.WriteLine(DisplayName + " was not found in HKEY_LOCAL_MACHINE\_
        SoftwareMicrosoftWindowsCurrentVersionUninstall _
        on this computer" + vbLf)
        End If
    End Sub
    
    Private Function GetKeyValue(ByVal keyName As String, ByVal valueName As String) _
    As String
        Dim obj As Object = m_rKey.OpenSubKey(keyName).GetValue(valueName)
        If Not obj Is Nothing Then
            Return obj
        Else
            Return ""
        End If
    End Function
    
    Private Function WildCardCompare(ByVal strInput As String, _
    ByVal strWildCard As String) As Boolean
        strWildCard = "^" + Regex.Escape_
    (strWildCard).Replace("*", ".*").Replace("?", ".") + "$"
        Return Regex.IsMatch(strInput, strWildCard, RegexOptions.IgnoreCase)
    End Function
    

    历史 2008年8月7日:初任 本文转载于:http://www.diyabc.com/frontweb/news10684.html

  • 相关阅读:
    iOS开发 代码 或 <Home+Power>截屏
    正弦水波纹波动画
    CAGradientLayer + UIBezierPath 为视图画渐变背景色
    字符串(String)和 字符(Character)
    Python+selenium爬取智联招聘的职位信息
    用Python写一个随机密码生成器
    golang文件处理函数openfile与linux系统的文件函数的耦合
    单向列表的实现代码,以及注释解释笔记
    CLion中出现错误add_dependencies called with incorrect number of arguments解决
    c语言指针的简单实例
  • 原文地址:https://www.cnblogs.com/Dincat/p/13473235.html
Copyright © 2011-2022 走看看