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

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

11 голосов
/ 18 августа 2010

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

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

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

Это так?

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

Ответы [ 4 ]

10 голосов
/ 19 августа 2010

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

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

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

9 голосов
/ 18 августа 2010

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

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

Теперь есть несколько способов выхода из этого рассола:

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

или

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

или

  1. Изобразите вашу рабочую станцию ​​
1 голос
/ 10 мая 2013

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

Например:

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

1 - Вы экспериментировали с " run from source " во время установки?

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

enter image description here

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

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

4 - Перенаправлены ли какие-либо из ваших папок userprofile в общий сетевой ресурс?

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

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

...