zoukankan      html  css  js  c++  java
  • Parse MSI installers by call MSI database [C#]

    Purpose: Parse MSI installer, to get information such as product name, product code, properties etc.

    MSI is a standard windows install techonoly, so there are APIs for developers to access. But they are c/c++ methods, instead of C#. After google, i found the ‘Wrapping the Windows Installer 2.0 API’(http://www.codeproject.com/KB/cs/msiinterop.aspx), which is can let .net developers access MSI api easily.

    After download the library, you can visit MSI datatable like this

     1:  using System;
     2:  using WindowsInstaller;
     3:   
     4:  namespace MsiTest
     5:  {
     6:      class Program
     7:      {
     8:          static void Main(string[] args)
     9:          {
    10:              test("c:\\xxx.msi");
    11:          }
    12:   
    13:          private static void test(string fileName)
    14:          {
    15:              IntPtr databasePtr;
    16:              var retDatabase = MsiInterop.MsiOpenDatabase(fileName, MsiDbPersistMode.ReadOnly, out databasePtr);
    17:   
    18:              IntPtr viewPtr;
    19:              var ret = MsiInterop.MsiDatabaseOpenView(databasePtr, "SELECT Value FROM Property where Property = 'SecureCustomProperties'", out viewPtr);
    20:   
    21:              IntPtr recordPtr = IntPtr.Zero;
    22:              ret = MsiInterop.MsiViewExecute(viewPtr, IntPtr.Zero);
    23:              ret = MsiInterop.MsiViewFetch(viewPtr, ref recordPtr);
    24:   
    25:              uint buffer_length = 2550;
    26:              string return_buffer = new string(' ', (int)buffer_length);
    27:              MsiInterop.MsiRecordGetString(recordPtr, 1, return_buffer, ref buffer_length);
    28:              MsiInterop.MsiCloseAllHandles();
    29:   
    30:              Console.WriteLine(return_buffer.Trim());
    31:          }
    32:   
    33:      }
    34:  }
    35:   
    36:   
  • 相关阅读:
    Oracle,第六周
    JAVA创建对象的几种方式
    深拷贝和浅拷贝
    Facade
    Adapter
    低谷过去了
    Oracle,第五周
    Command
    Singleton
    mybatis自动生成mapping和实体
  • 原文地址:https://www.cnblogs.com/skywind/p/2252617.html
Copyright © 2011-2022 走看看