Wix С# Пользовательское действие не выполняется вообще

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

У меня есть моя кнопка, определяемая следующим образом:

<control type="PushButton" id="DatabaseVerifyConnectionButton" x="118" y="150" width="116" height="17" text="Verify Connection" property="DATABASEVERIFYCONNECTIONBUTTONPROPERTY" default="yes">
 <publish event="DoAction" value="VerifyDatabaseConnection">1</publish>
 <publish event="SpawnDialog" value="VerifySuccessDlg">VERIFIEDCONNECTION = "1"</publish>
 <publish event="SpawnDialog" value="VerifyFailedDlg">VERIFIEDCONNECTION = "0"</publish>
</control>

Мое пользовательское действие XML

Мое пользовательское действие Код С#:

[CustomAction]
 public static ActionResult VerifyDatabaseConnection(Session session)
 {
 System.Diagnostics.Process.Start(@"C:\Windows\System32\calc.exe");
 return ActionResult.Failure;
 }

В журналах показано следующее:

MSI (c) (58:B4) [16:39:45:183]: Doing action: VerifyDatabaseConnection
Action 16:39:45: VerifyDatabaseConnection. 
Action start 16:39:45: VerifyDatabaseConnection.
Action ended 16:39:45: VerifyDatabaseConnection. Return value 1.

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

Я также кое-что прочитал о MakeSfxCA.exe, но я не мог на всю жизнь найти НИКОГДА, как заставить его работать правильно. Но я также читал, что Visual Studio должен сделать это для вас, если вы добавили проект Custom Action в качестве проекта пользовательских действий, который я сделал.

У меня здесь полная потеря. Почему это не будет работать? Он показывает успех везде, но он вообще не выполняет никакого кода.

1 ответ

Проверьте имя DLLEntry "VerifyDatabaseConnection2", но вы фактически используете имя метода действия "VerifyDatabaseConnection" (отсутствует 2, поэтому его никогда не вызывали).

Также измените элемент публикации, чтобы вызвать "VerifyDatabaseConnectionCA" вместо "VerifyDatabaseConnection".

licensed under cc by-sa 3.0 with attribution.