Я пытался выяснить, почему мой плагин Office2010 оставляет исключение пустого указателя при удалении, а версия 2007 - нет.(Изменить: 2007 находится в том же состоянии, что и 2010 - FAIL)
Чтобы сузить его, я поставил несколько ловушек журнала событий, то есть, если код достигнет этой точки, я должен получить что-то в журнале событий.Нет такой удачи.Теперь я либо написал ошибку в журнале событий, либо код не достиг этой точки.
В CustomSetupActions - ClickOnceInstaller.cs
public void Uninstall(System.Collections.IDictionary savedState)
{
// write something to eventlog
// This is not being fired, the exception doesn't reach here or writing to eventlog fails.
if (!EventLog.SourceExists("OfficePlugin"))
{
EventLog.CreateEventSource("OfficePlugin", "Application");
}
EventLog.WriteEntry
("OfficePlugin"
, string.Format("Uninstalling: (bug hunting)"), EventLogEntryType.Information);
string deploymentLocation = (string)savedState["deploymentLocation"];
if (deploymentLocation != null)
{
string arguments = String.Format(
"/S /U \"{0}\"", deploymentLocation);
ExecuteVSTOInstaller(arguments);
}
}
Что касается ExecuteVSTOInstaller(string arguments)
2007 относится к: string subPath = @"Microsoft Shared\VSTO\9.0\VSTOInstaller.exe";
2010 относится к: string subPath = @"Microsoft Shared\VSTO\10.0\VSTOInstaller.exe";
Если бы сработала первая ловушка, это место, где я бы поставил ловушку впоследствии.
-
У меня есть другой метод, который обрабатывает регистрацию db
RegisterOffice2010AddIn.cs
public void UnRegisterAddIn(string applicationName, string addInName)
{
Следующая строка - точно та же ловушка журнала событий, которую я только что использовал / показал.
Разница между ними (2007 против 2010).
private const string UserSettingsLocation =
@"Software\Microsoft\Office\12.0\User Settings";
против
private const string UserSettingsLocation =
@"Software\Microsoft\Office\14.0\User Settings";
Я не могу представить ни одного другого места, которое может быть интересным для размещения ловушки,У меня есть CustomInstaller, который ничего не делает, кроме Dispose(bool disposing)
и InitializeComponent()
Разработка:
Начало действия 14:21:00: PublishFeatures.
Действие завершено 14:21:00: PublishFeatures.Возвращаемое значение 1.
Действие начало 14:21:00: PublishProduct.
Действие завершено 14:21:00: PublishProduct.Возвращаемое значение 1.
Начало действия 14:21:00: InstallExecute.
MSI (c) (B8: BC) [14: 21: 01: 013]: шрифт создан.Кодировка: Req = 0, Ret = 0, шрифт: Req = MS Shell Dlg, Ret = MS Shell Dlg
Ошибка 1001. Ошибка 1001. При удалении возникла исключительная ситуация.Это исключение будет проигнорировано, и удаление продолжится.Тем не менее, приложение может быть не полностью удалено после завершения удаления.-> Ссылка на объект не установлена для экземпляра объекта.
ОТЛАДКА: Ошибка 2769: пользовательское действие _EE8A0D36_BE55_421F_9A55_95470C001D87.uninstall не закрыло 1 MSIHANDLE.
Программа установки обнаружила непредвиденную ошибку при установке этого пакета.Это может указывать на проблему с этим пакетом.Код ошибки - 2769. Аргументы: _EE8A0D36_BE55_421F_9A55_95470C001D87.uninstall, 1,
Действие завершено 14:21:05: InstallExecute.Возвращаемое значение 3.
Действие завершено 14:21:06: УСТАНОВИТЬ.Возвращаемое значение 3.
Поиск ошибки 2769 - дает ответ «[TARGETDIR] \», но я не ссылаюсь на TargetDir, я ссылаюсь на deployLocation.И да, я попытался добавить «\» в те места, о которых мог подумать.Включая настройку - Registry - HKLM \ Software \ MS \ Office \ 12.0 \ ... etc ... \ Addins \ Excel / Word / Outlook и значение ключа Manifest.Не оставил отзывов, хороших или плохих, ошибок или иного.Я в растерянности, что еще можно попытаться выследить этого.
У меня есть предположение, что оно ссылается на это, в VDPROJ:
{
"Name" = "8: UnregisterOutlookAddIn"
"Condition" = "8:"
"Object" = "8: _73E71A44EB72485AB7367745F7D57F49"
"FileType" = "3: 1"
"InstallAction "=" 3: 4 "
" Аргументы "=" 8: "
" EntryPoint "=" 8: "
" Sequence "=" 3: 3 "
" Identifier "="8: _EE8A0D36_BE55_421F_9A55_95470C001D87 "
" InstallerClass "=" 11: TRUE "
" CustomActionData "=" 8: / addinName = \ "OUR.Outlook.Outlook2010AddIn \" / application = \ "Outlook \" \ "}
Я обнаружил, что он выдает два исключения - вторичное в CustomSetupActions и UnregisterAddIn и первичное в ClickOnceInstaller и Uninstall.Как я могу упомянуть их как второй и основной.Что ж, он сделает исключение в CustomAction, а затем убьет в ClickOnce.Я удалил один в CustomActions, и теперь мне остается только беспокоиться о ClickOnce.Из того, что я могу собрать, ClickOnce реализует интерфейс, указанный в проекте установки (Install, Rollback, Commit, Uninstall).Мне нужно только выяснить, как он может работать без метода удаления.
Отказ от ответственности: Если, конечно, я ошибаюсь и лаю не на том дереве.