2

有没有办法Enable32BitAppOnWin64在 WiX 中为 IIS6 获取元数据库属性?

我正在安装一个 Web 应用程序,需要aspnet_regiis.exe在 IIS 设置为 32 位模式的 64 位机器上运行。要获取 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 的正确路径。

4

1 回答 1

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 位数模式)迫使您将检查移至安装时。因此,您必须以某种方式重新设计您的条件逻辑。

于 2011-10-26T06:10:16.997 回答