Есть несколько вопросов по этой теме, я пробовал все решения, но ничего не работало для меня.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);
Спасибо за настройки журнала, я попробую. – Ezi
Вы обнаружите, что EnumAvailableSqlServers выдает ошибку. Вы также можете поместить его в блок catch try и записать или обработать ошибку. –
Проблема в том, что один и тот же код в автономном exe работает правильно. в пользовательском действии он сработает, прежде чем входить в этот подраздел, задолго до этой строки. – Ezi