Грешка при деинсталиране, ако оригиналният инсталационен DVD не е в устройството

При опит за премахване на нашето приложение в Add/Remove Programs се появява следната грешка и приложението не успява да се деинсталира:

Грешка

„mFileBagIDE.dll“ не е валидно кратко име на файл.

Любопитното е, че получавате тази грешка само ако оригиналното инсталационно DVD не е в устройството. Ако DVD е в устройството, деинсталирането работи перфектно.

Ето истинската удивителна: не хванахме този бъг, докато нашето приложение вече не беше широко разпространено и ситуациите на нашите клиенти са такива, че вероятно много от тях вече нямат оригиналния си DVD. Това означава, че инсталаторът на следващата версия (извършващ основно надграждане на инсталатора на Windows) ще се провали, защото не може първо да премахне предишната версия.

Та въпросът ми е двоен:

  • Какво направихме, за да създадем този проблем, за да можем да го избегнем в бъдещи версии?
  • Има ли начин да кажем на следващия ни инсталатор на Windows да игнорира тази грешка и да премахне предишната версия?

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

АКТУАЛИЗАЦИЯ: Имам следния ред в таблиците InstallExecuteSequence и InstallUISequence в моя MSI, което може да е много подходящо, но нямам представа какво представлява свойството SRCDIREX или къде се задава.

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

person Dave Mateer    schedule 28.01.2010    source източник


Отговори (3)


Вероятно едно от действията (стандартно или персонализирано), което препраща към оригиналния MSI, не е било обусловено да се изпълнява само при инсталация (например ResolveSource трябва да бъде обусловено като „Не е ИНСТАЛИРАН“). Може да успеете да заобиколите това с корекция (MSP файл), която променя условието за съответното действие.

person On Freund    schedule 28.01.2010
comment
Мисля, че това може да е! Имам действие ResolveSource както в InstallExecuteSequence, така и в InstallUISequence. Условието и за двете НЕ Е SRCDIREX. Излизам с пълна празна информация какво представлява този имот. Как да проверя къде е зададена стойността на това свойство? - person Dave Mateer; 28.01.2010
comment
Можете да отворите MSI с orca и да потърсите SRCDIREX, може би ще успеете да намерите нещо. - person On Freund; 28.01.2010
comment
Да, опитах това и няма съвпадения освен двете от действието ResolveSource. Има ли някъде другаде, което може да бъде? - person Dave Mateer; 28.01.2010
comment
Свойството може да бъде създадено от персонализирано действие, създадено от InstallAware... Не съм запознат с начина, по който InstallAware пакетира приложението, така че това е само предположение, но не би било изненадващо, тъй като много от другите MSI пакети (напр. InstallShield) правят фънки персонализирани действия вместо някои от вградените свойства. - person ewall; 28.01.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 файла. Това е малко болка, но съм почти сигурен, че ще свърши работа.

person Ed.    schedule 29.01.2010

опитвали ли сте да копирате тези файлове в папка %WinDir%/system32?

РЕДАКТИРАНЕ: Направете настройка за копиране на целия MSI пакет за настройка на диска и го инсталирайте от дисковото устройство. Премахнете всички файлове, които не са необходими за деинсталиране. Adobe, HP и много други компании правят това.

person cusspvz    schedule 28.01.2010
comment
аз не съм. Искате да кажете, че преди да опитате да деинсталирате, копирайте някои файлове в папката system32? Или като част от новата инсталация? Не съм много запознат с инсталатора на Windows, но това типична най-добра практика ли е? Ръчното бъркане в папката system32 ми звучи малко драконовско. :) - person Dave Mateer; 28.01.2010
comment
Не, това няма да работи. MSI търси файла на конкретно място и няма да търси дървото на пътя, за да го търси. - person ewall; 28.01.2010