Wix/MSI: невозможно удалить

Я разработал установщик Wix для внутреннего проекта, но совершенно случайно я обнаружил, что не могу удалить установщик на своей машине разработки, поскольку получаю следующее сообщение об ошибке:

Функция, которую вы пытаетесь использовать, находится на сетевом ресурсе, который недоступен

с диалогом, указывающим на путь .msi, который я установил из функции. (Здесь есть .msi, однако он был перестроен и так изменился с тех пор, как я его установил)

Меня заинтересовал этот диалог, поскольку я считал, что установщик Windows отслеживает установленные .MSI файлы, однако этот диалог, похоже, предполагает, что я могу разбить мой деинсталлятор, удалив, переместив или изменив установщик.

В этом случае?

Что мне нужно сделать, чтобы я не нарушил мой деинсталлятор таким образом? (Нужно ли сохранять копии всех версий установщика, когда-либо установленных на машине?)

Ответ 1

Один из первых болезненных уроков написания инсталляций - никогда не запускать свою установку в своей собственной коробке. Конечно, пока он не достигнет точки зрелости и прошел несколько циклов QA. Для этого у нас есть интеграционные лаборатории и виртуальные машины. (Есть высказывание о вещах, которые вы не должны делать в своем собственном заднем дворе.)

Тем не менее, обычно MSI-удаление не требует MSI, но есть ситуации, когда это может потребоваться. Например, если нужно было вызвать действие ResolveSource во время удаления, MSI затем будет искать .MSI.

Теперь из этого рассола существует несколько способов:

  • Возьмите MSI, который у вас есть, и отредактируйте его с ORCA в соответствии с именем файла, UpgradeCode, ProductCode и PackageCode установленного вами MSI. Вы должны иметь возможность получить всю эту информацию от просмотра разделенной кэшированной MSI, которая существует в %WINDIR%\Installer. CD в ​​этот каталог и выполните findstr -i -m SOMESTRING *.msi, где SOMESTRING является чем-то уникальным, как ваше свойство ProductName. Как только вы узнаете имя кэшированной MSI, откройте его в Orca, чтобы получить необходимые атрибуты. Затем поместите эти атрибуты в копию имеющейся у вас MSI и попытайтесь удалить. Нет, это не точный MSI, который вы установили, но обычно достаточно близко.

или

  1. Используйте утилиту очистки установщика передних окон (если она у вас есть) и/или встроенная утилита MSIZAP, чтобы стереть все знания о приложении из MSI и Add/RemovePrograms. Обратите внимание, что это фактически не деинсталлирует программу, поэтому вам придется также написать script или иначе вручную удалить все трассы программы.

или

  1. Восстановить рабочую станцию ​​

Ответ 2

Самый простой способ выйти из этой ситуации - сделать рекаши/переустановить. Создайте новую версию своего MSI, которая не "сломана" (как бы она ни была нарушена, в этом случае она может быть совсем не нарушена, вам просто нужен новый источник). Затем вы используете командную строку, например:

msiexec /fv path\to\your.msi /l*v i.txt

Это скопирует ваш .msi через MSI, который будет кэширован и сделает ремонт. Тогда вы будете в лучшем месте.

Ответ 3

Если вы точно знаете, что не так (что часто бывает во время разработки), я предпочитаю открыть файл MSI, который Windows будет использовать для удаления, и отредактировать его непосредственно с помощью инструмента Orca, чтобы исправить или удалить часть, которая вызывает отказ.

Например:

  • Найдите файл MSI в% WINDIR%\Installer. MSI должен быть последним отредактированным файлом MSI в этой папке сразу после неудачной деинсталляции.
  • Откройте файл msi с помощью Orca.
  • Удалите неисправную часть - например, действие InstallExecuteSequence, которое выходит из строя, что является атипичным сценарием.
  • Сохраните msi и закройте Orca, чтобы освободить блокировку файла msi.

Ответ 4

1. Вы экспериментировали с " запустите из источника" во время установки?

Это вариант в дереве функций, который позволяет запускать некоторые файлы из их источника установки. Обычно это сочетается с изображением администратора в сети. См. Изображение ниже. Я не пробовал, но я предполагаю, что это может привести к: "Функция, которую вы пытаетесь использовать, находится на сетевом ресурсе, который недоступен", если сеть отключена, и вы пытаетесь удалить. Просто теория, есть и другие способы, которые могут произойти.

enter image description here

2 - Вы используете script пользовательские действия? Если да, вы извлекаете в папку tmp или запускаете из установленных файлов или бинарной таблицы? Если это так, настраивается ли какое-либо действие только при установке?

3 - Возможно, вы используете EXE собственное действие, указывающее на установленный файл? Если этот файл может быть недоступен в сети.

4 - Являются ли какие-либо из ваших списков пользовательских профилей перенаправлены в общий сетевой ресурс?

5 - Устанавливаете ли вы что-либо непосредственно в папку в сети?

Есть много других возможностей.