chcę czytać właściwości MSI w języku C# w application.I stacjonarnych używam następujący kod:Jak odczytać właściwości MSI w C#
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;
}
ale otrzymuję błąd jak System.Runtime.InteropServices.COMException było nieobsługiwane.
plik sqlncli.msi jest fizycznie umieszczany w lokalizacji c: \ DataP. Podczas debugowania znalazłem, że baza danych nie zawiera danych po instrukcji install.OpenDatabase().
Proszę zasugerować mi, jak rozwiązać ten problem i uzyskać właściwości MSI w języku C#.
Z góry dziękuję.
W którym wierszu jest wyświetlany wyjątek? –
Twoje zapytanie zawiera dziwne cudzysłowy wokół nazwy właściwości: 'WHERE Właściwość = '{0}'' powinno być 'WHERE Właściwość = '{0}''. –
wyjątek jest generowany w widoku widoku = database.OpenView (sql); –