WiX IIS Metabase属性

时间:2011-10-25 19:17:33

标签: iis-6 wix iis-metabase

有没有办法在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的正确路径。

1 个答案:

答案 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位模式)会强制您将检查移至安装时。因此,你必须以某种方式重写你的条件逻辑。