2014-12-08 6 views
0

Есть несколько вопросов по этой теме, я пробовал все решения, но ничего не работало для меня.WiX Custom Action Ends Prematurely

Проблема в том, что он «работает» на машинах с установленной визуальной студией, но не работает на других компьютерах .. это очень сложно отладить.

Обычай код действия:

[CustomAction] 
public static ActionResult EnumerateSqlServers(Session session) 
{ 
    MessageBox.Show("start EnumerateSQLServers"); // the message is not showing. 
    ActionResult result; 
    DataTable dt = SmoApplication.EnumAvailableSqlServers(false); 
    DataRow[] rows = dt.Select(string.Empty);//, "IsLocal desc, Name asc"); 
    result = EnumSqlServersIntoComboBox(session, rows); 
    return result; 
} 

Файл журнала показывает:

MSI (c) (2C:1C) [11:16:42:338]: Doing action: EnumerateSqlServersAction 
Action 11:16:42: EnumerateSqlServersAction. 
Action start 11:16:42: EnumerateSqlServersAction. 
MSI (c) (2C:34) [11:16:42:385]: Invoking remote custom action. DLL: C:\Users\Test\AppData\Local\Temp\MSI9328.tmp, Entrypoint: EnumerateSqlServers 
MSI (c) (2C:E8) [11:16:42:385]: Cloaking enabled. 
MSI (c) (2C:E8) [11:16:42:385]: Attempting to enable all disabled privileges before calling Install on Server 
MSI (c) (2C:E8) [11:16:42:385]: Connected to service for CA interface. 
Action ended 11:16:42: EnumerateSqlServersAction. Return value 3. 
DEBUG: Error 2896: Executing action EnumerateSqlServersAction failed. 
The installer has encountered an unexpected error installing this package. This may indicate a problem with this package. The error code is 2896. The arguments are: EnumerateSqlServersAction, , 
Action ended 11:16:42: WelcomeDlg. Return value 3. 
MSI (c) (2C:44) [11:16:42:635]: Doing action: FatalError 
Action 11:16:42: FatalError. 
Action start 11:16:42: FatalError. 
Action 11:16:42: FatalError. Dialog created 
Action ended 11:16:43: FatalError. Return value 2. 
Action ended 11:16:43: INSTALL. Return value 3. 
MSI (c) (2C:44) [11:16:43:370]: Destroying RemoteAPI object. 
MSI (c) (2C:E8) [11:16:43:385]: Custom Action Manager thread ending. 

я сделал попробовать пустое действие, как это:

[CustomAction] 
     public static ActionResult CustomAction1(Session session) 
     { 
      MessageBox.Show(""); 
      return ActionResult.Success; 
     } 

, что действие работает! он показывает пустое поле сообщения.

EDIT: После большого тестирования я обнаружил, что проблема связана с enumSQLServer, когда я прокомментирую эту строку, в которой он работает.

SmoApplication.EnumAvailableSqlServers(false); 

ответ

2

Записать установщик с использованием подробных настроек (/ l * v). Я ожидаю увидеть намного больше, включая трассировку стека .NET. Вероятно, вам не хватает зависимости, которая находится на машине визуальной студии, но не на вашей чистой тестовой машине.

Скорее всего, отсутствующая зависимость - это Microsoft.SqlServer.Smo.dll. В вашем проекте пользовательского действия проверьте, установлено ли эта ссылка для CopyLocal = true и установите ее, если это не так.

+0

Спасибо за настройки журнала, я попробую. – Ezi

+0

Вы обнаружите, что EnumAvailableSqlServers выдает ошибку. Вы также можете поместить его в блок catch try и записать или обработать ошибку. –

+0

Проблема в том, что один и тот же код в автономном exe работает правильно. в пользовательском действии он сработает, прежде чем входить в этот подраздел, задолго до этой строки. – Ezi

0

Вы уже пытались запустить свою установку с повышенными правами (щелкните правой кнопкой мыши по настройке и выберите «Запуск от имени администратора»)?

SmoApplication.EnumAvailableSqlServers (false) нуждается в повышенных правах, насколько мне известно.

Также проверьте свое определение пользовательского действия на узле Product в файле .wxs.

После определения должно работать:

<CustomAction Id="EnumerateSqlServers" BinaryKey="YOUR BINARY KEY" DllEntry="EnumerateSqlServers" Execute="immediate" Return="check"/>

попробовать также следующие для целей тестирования:

<InstallUISequence> <Custom Action="EnumerateSqlServers" Before="ExecuteAction" Overridable="yes">NOT Installed</Custom> </InstallUISequence>

+0

настройка всегда выполняется с повышенными правами. Я проверю другие предложения. благодаря – Ezi

0

В моем случае, это происходит на установки и удаления.

Что мы делаем, это шифрование строки соединения, передаваемой в качестве параметра.

Установите

Это терпит неудачу, потому что у меня нет доступа к установленному конфигурационному файлу, который мы все еще работаем. Я хочу, чтобы WiX был немного проще в использовании или имел лучшую документацию.

Uninstall

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

Решение: Используйте NOT Installed AND NOT REMOVE. How to execute custom action only in install (not uninstall)

Смежные вопросы