Как удалить функцию из дерева выбора функций 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