0

是否可以创建一个简单的 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 的空安装程序似乎可以始终如一地工作。

4

1 回答 1

1

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

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

那么该怎么做呢?基本上,您必须在执行序列中抑制一堆标准操作,以便不会创建目录,并且不会将功能/组件/产品等发布到跟踪 MSI 所做操作的 MSI 元数据库。

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

于 2012-05-24T20:54:41.277 回答