Определение версии MSI без его установки - PullRequest
7 голосов
/ 22 августа 2011

У меня есть файл MSI, созданный из моей C # Visual Studio 2010. Версия устанавливается через свойство Version. Я хотел знать, есть ли способ определить версию без необходимости установки файла. В настоящее время при щелчке правой кнопкой мыши и просмотре свойств он не отображается.

Ответы [ 2 ]

6 голосов
/ 22 августа 2011

Следующий код может быть полезным. Но помните, что вы должны сначала добавить ссылку COM в библиотеку объектов установщика Microsoft Windows и добавить пространство имен WindowsInstaller в свой код. Следующая функция может быть то, что вам нужно.

public static string GetMsiInfo( string msiPath, string Info)
{
   string retVal = string.Empty;

   Type classType = Type.GetTypeFromProgID( “WindowsInstaller.Installer” );
   Object installerObj = Activator.CreateInstance( classType );
   Installer installer = installerObj as Installer;

   // Open msi file
   Database db = installer.OpenDatabase( msiPath, 0 );

   // Fetch the property
   string sql = String.Format(“SELECT Value FROM Property WHERE Property=’{0}’”, Info);
   View view = db.OpenView( sql );
   view.Execute( null );

   // Read in the record
   Record rec = view.Fetch();
   if ( rec != null )
      retVal = rec.get_StringData( 1 );

   return retVal;
}

Если вам нужна версия, введите имя MSI-файла, который вы хотите, например,

string version = GetMsiInfo( "d:\product.msi", “ProductVersion” );
3 голосов
/ 22 августа 2011

Да - я думаю, что вам нужно проверить базу данных MSI, которая требует либо вызовов API, либо утилиты-оболочки.

Microsoft ORCA приложение должно позволить вам сделать это (хотя я сам никогда не пробовал).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...