Wix 3.5.2030.0 Protectatabase FAILES с 1603 с внешним пользователем UI DTF, работает без внешнего обработчика пользовательского интерфейса
-
02-10-2019 - |
Вопрос
У меня есть простой установщик Wix (3.5.2030.0) в Windows 7 (Windows Installer 5.0.7600.16385 в соответствии с свойствами Msiexec.exe), который использует предоставленные пользовательские действия для создания базы данных SQL. Когда я запускаю MSI сам по себе или запустите его в транзакции в Bootstrapper настройки C # (с помощью DTF для Interop), он работает правильно.
Когда я запускаю MSI в Bootstrapper и крюк во внешний обработчик пользовательского интерфейса (единственным изменением кода от рабочего вызова - это называется следующим образом:
Installer.SetExternalUI(ExternalUIHandler, ilm);
), однако, вызов создания не удается. В журнале SQL нет ничего особенного - это показывает, что запускается база данных. В SQL Profiler нет ничего подходящего в SQL - это показывает проверку CA для существования базы данных, затем попытка падения после завершения неисправности. Ниже приведен то, что показывает журнал Debug Verbose:
MSI (s) (74:F4) [16:42:59:213]: Executing op: ActionStart(Name=CreateDatabase,Description=Creating Databases,)
MSI (s) (74:F4) [16:42:59:243]: Executing op: CustomActionSchedule(Action=CreateDatabase,ActionType=25601,Source=BinaryData,Target=**********,CustomActionData=**********)
MSI (s) (74:F4) [16:42:59:253]: Creating MSIHANDLE (769) of type 790536 for thread 5876
MSI (s) (74:A4) [16:42:59:253]: Invoking remote custom action. DLL: C:\Windows\Installer\MSID856.tmp, Entrypoint: CreateDatabase
MSI (s) (74!7C) [16:43:01:493]: Creating MSIHANDLE (770) of type 790531 for thread 8060
MSI (s) (74!7C) [16:43:01:513]: Closing MSIHANDLE (770) of type 790531 for thread 8060
CustomAction CreateDatabase returned actual error code 1603 (note this may not be 100% accurate if translation happened inside sandbox)
MSI (s) (74:A4) [16:43:14:682]: Closing MSIHANDLE (769) of type 790536 for thread 5876
Обратите внимание, что журнал не показывает полезный код ошибки SQL - просто (как всегда бесполезно) 1603 ошибка (перевод: что-то сломалось).
Что зацепляет во внешнем рабочем пользовательском интерфейсе с запуском создания базы данных?
Я знаю, что проблема связана с моим внешним кодом обработчика пользовательского интерфейса, потому что если я коротко цепил его с «возвратом Messageresult.none», то все работает.
Мой код обработчика верхнего уровня ниже; это основано на http://msdn.microsoft.com/en-us/library/aaa368786(vs.85).aspx.:
switch (messageType) {
case InstallMessage.FatalExit:
MessageBox.Show("FATAL EXIT: " + message, "Fatal exit",
MessageBoxButtons.OK, MessageBoxIcon.Error);
break;
case InstallMessage.Error:
MessageBox.Show("ERROR: " + message, "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
break;
case InstallMessage.Warning:
MessageBox.Show("WARNING: " + message, "Warning",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
break;
case InstallMessage.User:
// nothing to do here
break;
case InstallMessage.Info:
// nothing to do here
break;
case InstallMessage.FilesInUse:
MessageBox.Show("Files in use: " + message, "Files in use",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
break;
case InstallMessage.ResolveSource:
// nothing to do here
break;
case InstallMessage.OutOfDiskSpace:
MessageBox.Show("OUT OF DISK SPACE: " + message,
"Out of disk space", MessageBoxButtons.OK,
MessageBoxIcon.Exclamation);
break;
case InstallMessage.ActionStart:
_enableActionData = false;
ProcessActionStart(message);
break;
case InstallMessage.ActionData:
ProcessActionDataMessage(message);
break;
case InstallMessage.Progress:
// http://msdn.microsoft.com/en-us/library/aa370573(VS.85).aspx
ProcessProgressData(message);
break;
case InstallMessage.CommonData:
// ignore for now
break;
case InstallMessage.Initialize:
case InstallMessage.Terminate:
SetHighLevelStatus(messageType.ToString());
break;
case InstallMessage.ShowDialog:
// nothing to do here
break;
}
AddDetailedStatusLine("... " + messageType + ":" + message);
return MessageResult.None;
//return MessageResult.OK;
Поскольку полный UI еще не реализован, только часть прогресса прямо сейчас, я возвращаю «никто», чтобы внутреннее UI все еще пожали. Очевидно, что это нужно будет изменено до производства. То же самое относится и к звонкам сообщений, которые могут быть разобраны по-разному в производственном коде.
Спасибо!
Решение
В случае, если кто-то еще может работать к этому, оказывается, я ударил исключение в код, который я не обращался, поэтому его проходили вплоть до установщика Windows, который видел исключение в качестве неудачи и бросать его обратно.