创建简单的自定义操作Wix安装程序

时间:2012-05-23 22:52:29

标签: wix windows-installer wix3.6

是否可以创建一个只执行自定义操作的简单WIX安装程序,而不执行任何其他操作?我知道我可以通过使用以下WIX标记来使其工作,但是这仍然会在Program Files中创建一个文件夹,如果我删除CreateFolder行,它就不起作用。

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" 
 xmlns:util="http://schemas.microsoft.com/wix/UtilExtension" 
 xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension">
<Product Id="*" Name="RegisterDotNetISS" Language="1033" Version="1.0.0.0" Manufacturer="MyCompanyhere" UpgradeCode="67825899-d511-4cd3-a8c1-b2dd448a74bd">
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
    <MediaTemplate />

<PropertyRef Id="NETFRAMEWORK40FULLINSTALLROOTDIR"/>
<PropertyRef Id="NETFRAMEWORK40FULLINSTALLROOTDIR64"/>

<CustomAction Id='aspnetregiisi'  ExeCommand='"[NETFRAMEWORK40FULLINSTALLROOTDIR]\aspnet_regiis.exe" -i -enable' Directory='TARGETDIR' />
<CustomAction Id='aspnetregiisix64'  ExeCommand='"[NETFRAMEWORK40FULLINSTALLROOTDIR64]\aspnet_regiis.exe" -i -enable' Directory='TARGETDIR' />

<InstallExecuteSequence>
  <Custom Action="aspnetregiisi" After="CostFinalize">NOT VersionNT64</Custom>
  <Custom Action="aspnetregiisix64" After="CostFinalize">VersionNT64</Custom>
</InstallExecuteSequence>
<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="ProgramFilesFolder">
    <Directory Id="INSTALLFOLDER" Name="RegisterDotNetISS" >

      <Component Id="Component1"
                 Guid="{78E22868-B750-47EB-9E4C-C19CCA939394}">
        <CreateFolder />
      </Component>
    </Directory>
  </Directory>
</Directory>

<Feature Id="ProductFeature" Title="RegisterDotNetISS" Level="1">
  <ComponentRef Id="Component1" />
    </Feature>
</Product>

</Wix>

- EDIT-- 我正在寻找创建WIX安装程序而不是控制台应用程序,因为.net 3.5框架似乎在读取64位注册表时遇到问题。在4.0中添加了简单的功能,在IIS中注册asp.net的空安装程序似乎一致地工作。

1 个答案:

答案 0 :(得分:1)

它被称为“特洛伊木马MSI”,因为它看起来像一个MSI,但不像一个人。一些people @Microsoft批评了这一点,但有些人(微软再次)发布了它们。 (阅读评论..)

如果你需要它们,它们可以很安静。看看微软发布的“Mr FixIt”。由MSI驱动的漂亮的向导UI可以对您的系统进行一些更改,但实际上并没有安装任何东西。

那怎么办?基本上你必须在执行序列中压制一堆标准动作,这样就不会创建目录,并且不会将特征/组件/产品发布到跟踪MSI已经完成的MSI元数据库。

您可以通过创建InstallExecuteSequence元素以及子元素(如PublishProduct,PublishFeatures,PublishComponents,InstallFiles,CreateFolders)并使用Suppres属性禁用它来完成此操作。