我无法在自定义操作中找到有关从安装程序表访问属性的任何信息。我确实发现您可以编写一些安装程序 SQL 语法来从自定义操作更新表,但这太过分了,我无法让它工作。
我能够做的是使用 ISIISProperty 表的属性替换。
- 我在名为ASPBITNESS和ALLOWTHIRTYTWOBIT的属性表中创建了两个新属性,默认情况下它们分别设置为 x86 和 true。
- 然后我在直接编辑器中编辑了ISIISProperty表,并将Enable32bitAppOnWin64和AspNetVerBitness的值分别替换为 [ALLOWTHIRTYTWOBIT] 和 [ASPBITNESS]。有趣的是,启用 32 位应用程序设置在 InstallShield 设计器中显示为“否”,即使 [ALLOWTHIRTYTWOBIT] 属性默认设置为 true。
- 最后,我有一个自定义操作,有条件地(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:虚拟目录
“MyWebApp”的 SetVRootProperties,应用程序“
InstallShield” 12:09:19:IIS7 检查应用程序池
“MyAPPPool”上的 ASP.NET 版本位数,安装请求“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 (s) (D4:0C) [10:53:18:678]:使用 PID 912 (0x390) 创建了自定义操作服务器。
MSI (s) (D4:D0) [10:53:18:709]:作为服务运行。
MSI (s) (D4:D0) [10:53:18:709]:您好,我是您的 32 位模拟自定义操作服务器。
MSI (s) (D4!1C) [10:53:18:725]:属性更改:修改 ASPBITNESS 属性。
它的当前值为“x86”。它的新值:'x64'。
MSI (s) (D4!1C) [10:53:18:725]:属性更改:修改 ALLOWTHIRTYTWOBIT
属性。它的当前值为“真”。它的新值:'false'。
接着:
InstallShield 10:53:20:虚拟目录
“MyWebApp”、应用程序“
InstallShield”的 SetVRootProperties 10:53:20:IIS7 检查应用程序池
“MyAppPool”上的 ASP.NET 版本位数,安装请求“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