Удаление моего модуля Office 2010 оставляет исключение нулевого указателя - PullRequest
2 голосов
/ 07 апреля 2011

Я пытался выяснить, почему мой плагин 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).Мне нужно только выяснить, как он может работать без метода удаления.

Отказ от ответственности: Если, конечно, я ошибаюсь и лаю не на том дереве.

1 Ответ

0 голосов
/ 13 мая 2011

Изменить на WiX. Это стало обходным путем, поскольку оригинал все еще верен.

...