Wix 3.5.2030.0 Protectatabase FAILES с 1603 с внешним пользователем UI DTF, работает без внешнего обработчика пользовательского интерфейса

StackOverflow https://stackoverflow.com/questions/3680583

Вопрос

У меня есть простой установщик 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, который видел исключение в качестве неудачи и бросать его обратно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top