使用WiX设置ASP.Net版本

时间:2020-03-06 15:02:18  来源:igfitidea点击:

我正在使用WiX为ASP.Net网站创建安装程序。如何使用WiX在IIS中设置ASP.Net版本?

解决方案

  • 首先找到正确的.NET版本文件夹。使用DirectorySearch / FileSearch执行搜索。
  • 使用上面的路径调用aspnet_regiis.exe并通过自定义操作设置Web应用程序的版本。 aspnet_regiis.exe -s W3SVC / 1 / ROOT / SampleApp1

我通过使用WiX WebApplicationExtension找到了另一种方法。我们可以在此处和此处查看完整的解决方案。

到目前为止,我仍然喜欢Wix,但是男人确实需要大量挖掘才能找到我们想要的东西。

我们使用这个:

首先从注册表中确定.Net框架的根目录:

<Property Id="FRAMEWORKROOT">
  <RegistrySearch Id="FrameworkRootDir" Root="HKLM"
                Key="SOFTWARE\Microsoft\.NETFramework" 
                Type="directory" Name="InstallRoot" />
</Property>

然后,在将网站安装到IIS中的组件内部:

<!-- Create and configure the virtual directory and application. -->
<Component Id='WebVirtualDirComponent' Guid='{GUID}' Permanent='no'>
  <iis:WebVirtualDir Id='WebVirtualDir' Alias='YourAlias' Directory='InstallDir' WebSite='DefaultWebSite'  DirProperties='DirProperties'>
    <iis:WebApplication Id='WebApplication' Name='YourAppName' WebAppPool='AppPool'>
      <!-- Required to run the application under the .net 2.0 framework -->
      <iis:WebApplicationExtension Extension="config" CheckPath="yes" Script="yes"
                    Executable="[FRAMEWORKROOT]v2.0.50727\aspnet_isapi.dll" Verbs="GET,HEAD,POST" />
      <iis:WebApplicationExtension Extension="resx" CheckPath="yes" Script="yes"
                    Executable="[FRAMEWORKROOT]v2.0.50727\aspnet_isapi.dll" Verbs="GET,HEAD,POST" />
      <iis:WebApplicationExtension Extension="svc" CheckPath="no" Script="yes"
                    Executable="[FRAMEWORKROOT]v2.0.50727\aspnet_isapi.dll" Verbs="GET,HEAD,POST" />
    </iis:WebApplication>
  </iis:WebVirtualDir>
</Component>

对于x64安装程序(这很重要)
将Win64 ='yes'添加到注册表搜索中,因为64位计算机上的32位环境具有不同的注册表配置单元(和不同的Frameworkroot)

<RegistrySearch Id="FrameworkRootDir" Root="HKLM"
        Key="SOFTWARE\Microsoft\.NETFramework" 
        Type="directory" 
        Name="InstallRoot" Win64='yes' />

经过努力,以下是对我有用的方法:

<Property Id="FRAMEWORKBASEPATH">
     <RegistrySearch Id="FindFrameworkDir" Root="HKLM" Key="SOFTWARE\Microsoft\.NETFramework" Name="InstallRoot" Type="raw"/>
  </Property>
  <Property Id="ASPNETREGIIS" >
     <DirectorySearch Path="[FRAMEWORKBASEPATH]" Depth="4" Id="FindAspNetRegIis">
        <FileSearch Name="aspnet_regiis.exe" MinVersion="2.0.5"/>
     </DirectorySearch>
  </Property>

  <CustomAction Id="MakeWepApp20" Directory="TARGETDIR" ExeCommand="[ASPNETREGIIS] -norestart -s W3SVC/[WEBSITEID]/ROOT/[VIRTUALDIR]" Return="check"/>

  <InstallExecuteSequence>
     <Custom Action="MakeWepApp20" After="InstallFinalize">ASPNETREGIIS AND NOT Installed</Custom>
  </InstallExecuteSequence>

[WEBSITEID]和[VIRTUALDIR]是我们必须定义的属性。仅当我们为应用程序而不是整个网站设置ASP.NET版本时,才需要[VIRTUALDIR]。

自定义操作的顺序至关重要。在InstallFinalize之前执行它会导致它失败,因为直到此之后Web应用程序才可用。

感谢Chris Burrows提供了查找aspnet_regiis可执行文件的正确示例(Google"使用WIX保护连接字符串")。

b

不要忘记在服务器上启用ASP 2.0

<iis:WebServiceExtension Id="ExtensionASP2" Group="ASP.NET v2.0.50727" Allow="yes" File="[NETFRAMEWORK20INSTALLROOTDIR]aspnet_isapi.dll" Description="ASP.NET v2.0.50727"/>

这是个问题