Я попытался найти свою проблему в Google, но без особого успеха. Я пытаюсь изменить файл MSI через winform С#. У меня проблема в том, что когда я удаляю файлы (которые я добавил!) из двоичной таблицы, записи исчезают, но размер файла MSI не уменьшается.
Вот как я добавляю новые файлы в двоичную таблицу:
view = database.OpenView("INSERT INTO Binary (Name,Data) VALUES ('" + fileName + "', ?)");
record = installer.CreateRecord(1);
record.SetStream(1, filePath);
view.Execute(record);
view.Close();
if(record != null)
Marshal.ReleaseComObject(record);
Marshal.FinalReleaseComObject(view);
Коммит происходит позже в коде:
database.Commit(); Marshal.FinalReleaseComObject(database); Marshal.FinalReleaseComObject(installer);
Вот как я удаляю запись:
view = database.OpenView("SELECT * FROM Binary WHERE Name = '" + binary + "'");
view.Execute(null);
Record record = view.Fetch();
if (record != null && record.FieldCount > 0)
{
view.Modify(MsiViewModify.msiViewModifyDelete, record);
}
view.Close();
if (record != null)
Marshal.ReleaseComObject(record);
Marshal.FinalReleaseComObject(view);
Я не думаю, что есть проблема с удалением, поскольку файлы, которые были вставлены с помощью Orca, были удалены просто отлично.
Когда я удаляю (либо с помощью Orca, либо с помощью своего кода) запись, которая была вставлена мной с помощью первого блока кода выше, запись исчезает, но размер файла MSI уменьшается всего на 10-20 КБ (вероятно, размер записи), даже если файл был 20MB.
Итак... В чем моя проблема...??
Надеюсь, я достаточно доступно объяснил вам ситуацию.
Кстати, просто добавлю, что я пытался вставить фотографию в двоичную таблицу, используя приведенный выше код, и извлек файл с помощью Orca. Это было хорошо, и фотография была в порядке. Так что это работает, просто неправильно, я думаю.