我想读在桌面application.I在C#MSI的性质正在使用下面的代码:在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属性。
在此先感谢。
在哪条线上抛出异常? –
您的查询在属性名称周围有一些奇怪的引号字符:'WHERE Property ='{0}''应该是WHERE Property ='{0}''。 –
View view = database.OpenView(sql);抛出异常 –