Как получить доступ к переменным, хранящимся в таблице Direct Editor, из пользовательского действия Installshield vbscript или javascript?

Мне нужно прочитать или изменить значение "Enable32bitAppOnWin64" в таблице IsIISProperty из пользовательского действия. Теперь, пока я могу получить доступ к свойствам из Property Manager, Session.Properties("PropertyName")

Я не вижу, как сделать то же самое для таблиц свойств. Я попытался {ISIISProperty1}, [ISIISProperty1] и Session.Properties("ISIISProperty1") все безуспешно.

Как мне этого добиться?

Любая помощь будет оценена.

Спасибо

1 ответ

Решение

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

То, что я смог сделать, это использовать замены свойств с таблицей ISIISProperty.

  1. Я создал два новых свойства в таблице свойств с именами ASPBITNESS и ALLOWTHIRTYTWOBIT, которые по умолчанию установлены в x86 и true соответственно.
  2. Затем я отредактировал таблицу ISIISProperty в непосредственном редакторе и заменил значения для Enable32bitAppOnWin64 и AspNetVerBitness на [ALLOWTHIRTYTWOBIT] и [ASPBITNESS] соответственно. Интересно, что параметр "Включить 32-разрядные приложения" показывает "Нет" в конструкторе InstallShield, хотя для свойства [ALLOWTHIRTYTWOBIT] по умолчанию установлено значение true.
  3. Наконец, у меня есть пользовательское действие, которое условно (NOT REMOVE и VersionNT64 и IIS_VERSION > "#6") запускается в самом начале установки, чтобы соответствующим образом изменить эти значения.

Код кода настраиваемого действия:

On Error Resume Next

' change the properties for x64 systems
if SYSINFO.bIsWow64 <> 0 then
    Session.Property("ASPBITNESS") = "x64"  
    Session.Property("ALLOWTHIRTYTWOBIT") = "false"
end if

До того, как журналы MSI показали:

InstallShield 12:09:19: SetVRootProperties для виртуального каталога
'MyWebApp', приложение ''
InstallShield 12:09:19: проверка IIS7 на разрядность версии ASP.NET в пуле приложений
'MyAPPPool', установка запрашивает 'x86'
...
InstallShield 12:09:19: SetAspversion: машина является 64-разрядной и
IIS работает в битовом режиме, отличном от текущего выбранного режима
...
InstallShield 12:09:19: ошибка с IISRT: -2172
...
CustomAction ISIISInstall вернул фактический код ошибки 1603 (обратите внимание, что это может быть не на 100% точно, если перевод произошел внутри песочницы)

После этих изменений приложения устанавливаются, и журналы теперь показывают:

MSI (s) (D4: 1C) [10: 53: 18: 662]: Выполнение действия: Set64Bit
Действие 10:53:18: Set64Bit.
Начало действия 10:53:18: Set64Bit.
MSI (D4:0C) [10:53:18:678]: создан сервер пользовательских действий с PID 912 (0x390).
MSI (D4:D0) [10:53:18:709]: Запуск в качестве службы.
MSI (D4:D0) [10:53:18:709]: Здравствуйте, я ваш 32-битный олицетворенный сервер пользовательских действий.
MSI (D4! 1C) [10: 53: 18: 725]: ИЗМЕНЕНИЕ ИМУЩЕСТВА: изменение свойства ASPBITNESS.
Его текущее значение - x86. Его новое значение: "x64".
MSI (s) (D4! 1C) [10: 53: 18: 725]: ИЗМЕНЕНИЕ СОБСТВЕННОСТИ: Изменение ALLOWTHIRTYTWOBIT
имущество. Текущее значение "true". Его новое значение: "ложь".

А потом:

InstallShield 10:53:20: SetVRootProperties для виртуального каталога
'MyWebApp', приложение ''
InstallShield 10:53:20: проверка IIS7 на битность версий ASP.NET в пуле приложений
'MyAppPool', установка запрашивает 'x64'
InstallShield 10:53:20: Пул приложений Enable32bitAppOnWin64 имеет значение "false"
InstallShield 10:53:20: версия ASP.NET может быть установлена ​​для 64-разрядной версии.
InstallShield 10:53:20: Настройка версии ASP.NET:
C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ aspnet_regiis.exe -ir

Другие вопросы по тегам