Как удалить функцию из дерева выбора функций MSI во время выполнения?

Когда мы запускаем MSI, после нескольких экранов мы получим страницу выбора функций.

Страница выбора функции:

Мы можем удалить любую функцию, просто изменив таблицу функций, отображая значение столбца в 0.

Но как изменить его во время выполнения, я имею в виду, основываясь на некотором значении свойства, которое может быть изменено в другом настраиваемом диалоге, который мы добавляем, или на основе настраиваемого действия.

Я попытался создать свойство и добавить это свойство в столбце отображения таблицы объектов как [Property1],

Но он не принимает нецелые значения.

Любое предложение, как это реализовать, пожалуйста.

Я попробовал это до сих пор.

Создано пользовательское действие типа vbscript

UpdateFeatureDisplay "erwinDM",Session.Property("DM_VISIBLE")   
UpdateFeatureDisplay "NoSQLStandalone",Session.Property("NS_VISIBLE")   

Sub UpdateFeatureDisplay(featureName,display)   
    Set viewlist = Database.OpenView("SELECT * FROM `Feature` WHERE `Feature`='"& featureName &"'")
    viewlist.Execute
    Set reclist = viewlist.Fetch
    viewlist.Modify 6 , reclist
    reclist.StringData(5)= CStr(display)
    'reclist.IntegerData(5)= CInt(display)
    viewlist.Modify 7 , reclist 
    viewlist.Close
End Sub

И оставил его включенным при нажатии кнопки "Далее" перед страницей выбора пользовательской функции. Где я беру значения из флажков.

Но я получаю ошибку в журнале, как показано ниже.

MSI (c) (14:B4) [17:50:30:269]: Note: 1: 1720 2: setFeatureDisplay 3: -2147467259 4: Msi API Error 5: Modify,Mode,Record 6: 8 7: 2 
Action ended 17:50:30: setFeatureDisplay. Return value 1.

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

Если мы передадим значение свойства, которое изменяется с помощью пользовательского интерфейса, в качестве параметра командной строки, то только оно отражает. Я имею в виду, во время запуска msi.

1 ответ

Если вы хотите удалить функцию из дерева во время выполнения, вам нужно изменить Feature таблица с запросом SQL в пользовательском действии. Примерно так (я не тестировал код, но он должен быть достаточно близок к вашим потребностям):

featurename="Your Feature Name"
Set oView = Database.OpenView("SELECT * FROM `Feature` WHERE `Feature`='"&featurename&"'")
oView.Execute

' test on first Feature record
Set oRecord = oView.Fetch

' delete the original
oView.Modify 6, oRecord

' modify and temporarily write back new
oRecord.IntegerData(5) = 0
oView.Modify 7, oRecord

' close up shop
oView.Close
Другие вопросы по тегам