我想在桌面应用程序中读取 C# 中 MSI 的属性。我正在使用以下代码:
public static string GetMSIProperty( string msiFile, string msiProperty)
{
string retVal= string.Empty ;
Type classType = Type.GetTypeFromProgID("WindowsInstaller.Installer");
Object installerObj = Activator.CreateInstance(classType);
WindowsInstaller.Installer installer = installerObj as WindowsInstaller.Installer;
Database database = installer.OpenDatabase("C:\\DataP\\sqlncli.msi",0 );
string sql = String.Format("SELECT Value FROM Property WHERE Property=’{0}’", msiProperty);
View view = database.OpenView(sql);
Record record = view.Fetch();
if (record != null)
{
retVal = record.get_StringData(1);
}
else
retVal = "Property Not Found";
return retVal;
}
但是我收到错误,因为 System.Runtime.InteropServices.COMException 未处理。
sqlncli.msi 文件物理上放置在 c:\DataP 位置。在调试时我发现数据库不包含 installer.OpenDatabase() 语句之后的数据。
请建议我如何解决此问题并在 c# 中获取 MSI 属性。
提前致谢。