Ошибка удаления, если оригинальный установочный DVD не находится в дисководе - PullRequest
0 голосов
/ 28 января 2010

При попытке удалить наше приложение в разделе «Установка и удаление программ» появляется следующая ошибка, и приложение не может быть удалено:

Error

'mFileBagIDE.dll' не является допустимым коротким именем файла.

Любопытно, что вы получаете эту ошибку, только если оригинальный установочный DVD-диск отсутствует в приводе. Если DVD находится в приводе, деинсталляция работает отлично.

Вот настоящий кикер: мы не уловили эту ошибку до тех пор, пока наше приложение уже не было широко развернуто, и ситуации наших клиентов таковы, что, вероятно, у многих из них больше нет своих оригинальных DVD. Это означает, что установщик следующей версии (выполняющий серьезное обновление установщика Windows) завершится ошибкой, так как не может сначала удалить предыдущую версию.

Итак, мой вопрос двоякий:

  • Что мы сделали, чтобы создать эту проблему, чтобы избежать ее в будущих выпусках?
  • Есть ли способ сообщить нашему следующему установщику Windows, чтобы он проигнорировал эту ошибку и удалил предыдущую версию?

Наш текущий установщик (тот, который вызывает проблемы) был создан с использованием InstallAware. Скорее всего, мы переходим на WiX. Но решения на любой платформе (InstallAware, WiX, необработанные таблицы MSI) приветствуются!

ОБНОВЛЕНИЕ: У меня есть следующая строка в таблицах InstallExecuteSequence и InstallUISequence в моем MSI, что вполне может иметь значение, но я понятия не имею, что такое свойство SRCDIREX, или где это устанавливается.

| Action        | Condition    |
|---------------|--------------|
| ResolveSource | NOT SRCDIREX |

Ответы [ 3 ]

2 голосов
/ 28 января 2010

Вероятно, одно из действий (стандартное или пользовательское), которое ссылается на исходный MSI, не было обусловлено выполнением только при установке (например, ResolveSource должен быть обусловлен как «НЕ УСТАНОВЛЕНО»). Возможно, вам удастся обойти эту проблему с помощью патча (файла MSP), который изменяет условие соответствующего действия.

0 голосов
/ 29 января 2010

Я бы начал с определения того, какое действие вызывает ошибку. Вот как бы я это сделал:

  • Установите ваше приложение с DVD
  • скопировать MSI-файл в какую-нибудь локальную папку, скажем, "c: \ temp"
  • Удалить DVD
  • начать удаление, как это: "msiexec /x yourapp.msi /L*v c:\temp\uninst.log"

Когда появляется ошибка, удаление фактически приостанавливается. Затем вы можете проверить конец журнала, чтобы увидеть, где именно вы находитесь в последовательности. Это должно помочь вам в отладке.

Если ответом действительно является ResolveSource, регулярное исправление может быть невозможным. Хит Стюарт упоминает об этом в своем блоге - http://blogs.msdn.com/heaths/archive/2007/10/25/resolvesource-requires-source.aspx

"В общем случае не планируйте ResolveSource. Например, если он запускается при установке исправления, пользователю необходимо будет вставить исходный носитель независимо от того, понадобится он или нет."

Если вы находитесь в такой позиции, вы можете создать преобразование, которое обновит условие в вашем действии ResolveSource, и применить его к кэшированной копии файла msi вручную. Это немного больно, но я уверен, что это сработает.

0 голосов
/ 28 января 2010

Вы пытались скопировать эти файлы в папку% WinDir% / system32?

РЕДАКТИРОВАТЬ: Выполните настройку, чтобы скопировать весь установочный MSI-пакет на диск и установить его с дисковода. Удалите все файлы, ненужные для удаления. Adobe, HP и многие другие компании делают это.

...