有没有办法在WiX for IIS6中获取Enable32BitAppOnWin64
配置数据库属性?
我正在安装一个Web应用程序,需要在IIS设置为32位模式的64位计算机上运行aspnet_regiis.exe
。要获取exe的路径,我使用以下内容:
<!--<?if $(var.Platform) = x64 ?>-->
<SetProperty Id="ASPNETREGIIS" Sequence="execute" Before="ConfigureIIs" Value="[NETFRAMEWORK20INSTALLROOTDIR64]aspnet_regiis.exe" />
<!--<?else ?>
<SetProperty Id="ASPNETREGIIS" Sequence="execute" Before="ConfigureIIs" Value="[NETFRAMEWORK20INSTALLROOTDIR]aspnet_regiis.exe" />
<?endif ?>-->
然而,当启用32位模式时,我不能依靠平台来获取exe的正确路径。
答案 0 :(得分:3)
WiX没有标准的方法来执行此操作 - 您需要自定义操作。它应该是立即CA并且它将设置一个属性,您将在您的条件中使用该属性。这是一个示例代码,可以满足您的需求,我想:
static bool IsIIS32bit()
{
var appPools = new DirectoryEntry("IIS://localhost/w3svc/AppPools");
int enable32Bit;
try
{
enable32Bit = (int)appPools.InvokeGet("Enable32bitAppOnWin64");
}
catch
{
enable32Bit = 0;
}
return enable32Bit == 1;
}
另请注意,在示例中,您使用构建时变量从两个SetProperty元素中进行选择。如果您有2个MSI包,每个平台一个,这将有效。在这种情况下,您的每个MSI包都将具有正确设置的属性。您现在添加的额外要求(检查IIS位模式)会强制您将检查移至安装时。因此,你必须以某种方式重写你的条件逻辑。