使用WiX设置ASP.Net版本

Jas*_*onS 25 asp.net installer wix

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

thi*_*ijs 22

我们用这个:

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

<Property Id="FRAMEWORKROOT">
  <RegistrySearch Id="FrameworkRootDir" Root="HKLM"
                Key="SOFTWARE\Microsoft\.NETFramework" 
                Type="directory" Name="InstallRoot" />
</Property>
Run Code Online (Sandbox Code Playgroud)

然后,在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>
Run Code Online (Sandbox Code Playgroud)

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

<RegistrySearch Id="FrameworkRootDir" Root="HKLM"
        Key="SOFTWARE\Microsoft\.NETFramework" 
        Type="directory" 
        Name="InstallRoot" Win64='yes' />
Run Code Online (Sandbox Code Playgroud)

  • 啊,WiX:正确的答案是15行神秘的XML,它算作"超级"并且仍然是一个不完整的答案(只处理了一些扩展,甚至不是最常见的.aspx)所有情况(不是64位). (2认同)

小智 13

在与它搏斗之后,这对我有用:

  <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>
Run Code Online (Sandbox Code Playgroud)

[WEBSITEID]和[VIRTUALDIR]是您必须自己定义的属性.只有在为应用程序而不是整个网站设置ASP.NET版本时,才需要[VIRTUALDIR].

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

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

JB


uli*_*i78 5

不要忘记在服务器上启用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"/>
Run Code Online (Sandbox Code Playgroud)

这是一个问题