Мой ответ в основном такой же, как и другие, замеченные здесь; Я просто хотел предложить людям другой пример.
Учитывая количество расширений файлов, обрабатываемых ASP.NET, и то, что список меняется в каждой версии, я думаю, что наиболее надежным решением является запуск aspnet_regiis
в конце установки. Это означает, однако, что у меня нет никакой поддержки для отката или удаления. Если вы создаете новое приложение в IIS, это не имеет значения, поскольку оно будет удалено Wix. Если вы изменяете существующее приложение, возможно, вы сможете узнать из реестра, какая версия ASP.NET настроена, и запустить эту версию aspnet_regiis
, чтобы отменить изменения.
Следующее использует Wix 3.5.
<Fragment>
<!-- Use the properties in Wix instead of doing your own registry search. -->
<PropertyRef Id="IISMAJORVERSION"/>
<PropertyRef Id="NETFRAMEWORK40FULL"/>
<PropertyRef Id="NETFRAMEWORK40FULLINSTALLROOTDIR"/>
<!-- The code I'm using is intended for IIS6 and above, and it needs .NET 4 to be
installed. -->
<Condition Message="This application requires the .NET Framework 4.0. Please install the required version of the .NET Framework, then run this installer again.">
<![CDATA[Installed OR (NETFRAMEWORK40FULL)]]>
</Condition>
<Condition Message="This application requires Windows Server 2003 and Internet Information Services 6.0 or better.">
<![CDATA[Installed OR (VersionNT >= 502)]]>
</Condition>
<!-- Populates the command line for CAQuietExec. IISWEBSITEID and IISVDIRNAME
could be set to default values, passed in by the user, or set in your installer's
UI. -->
<CustomAction Id="ConfigureIis60AspNetCommand" Property="ConfigureIis60AspNet"
Execute="immediate"
Value=""[NETFRAMEWORK40FULLINSTALLROOTDIR]aspnet_regiis.exe" -norestart -s "W3SVC/[IISWEBSITEID]/ROOT/[IISVDIRNAME]"" />
<CustomAction Id="ConfigureIis60AspNet" BinaryKey="WixCA" DllEntry="CAQuietExec"
Execute="deferred" Return="check" Impersonate="no"/>
<InstallExecuteSequence>
<Custom Action="ConfigureIis60AspNetCommand" After="CostFinalize"/>
<!-- Runs the aspnet_regiis command immediately after Wix configures IIS.
The condition shown here assumes you have a selectable feature in your
installer with the ID "WebAppFeature" that contains your web components. The
command will not be run if that feature is not being installed, or if IIS is
not version 6. It *will* run if the application is being repaired.
SKIPCONFIGUREIIS is a property defined by Wix that causes it to skip the IIS
configuration. -->
<Custom Action="ConfigureIis60AspNet" After="ConfigureIIs" Overridable="yes">
<![CDATA[((&WebAppFeature = 3) OR (REINSTALL AND (!WebAppFeature = 3)))
AND (NOT SKIPCONFIGUREIIS) AND (IISMAJORVERSION = "#6")]]>
</Custom>
</InstallExecuteSequence>
<UI>
<ProgressText Action="ConfigureIis60AspNetCommand"
>Configuring ASP.NET</ProgressText>
<ProgressText Action="ConfigureIis60AspNet"
>Configuring ASP.NET</ProgressText>
</UI>
</Fragment>