سؤال

أقوم بإنشاء برنامج تثبيت لموقع ويب ASP.Net باستخدام WiX.كيف يمكنك ضبط إصدار ASP.Net في IIS باستخدام WiX؟

هل كانت مفيدة؟

المحلول

نحن نستخدم هذا:

قم أولاً بتحديد الدليل الجذر لـ .Net Framework من السجل:

<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 = "نعم" إلى البحث عن السجل ، لأن بيئة 32 بت على جهاز 64 بت لديها خلية تسجيل مختلفة (و Erramorkroot مختلفة)

<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] والخصائص التي يجب أن تعرف نفسك. [VIRTUALDIR] هو ضروري فقط إذا كنت تقوم بإعداد النسخة ASP.NET لتطبيق بدلا من كامل الموقع.

ووتسلسل الإجراء المخصص أمر بالغ الأهمية. سوف تنفيذه قبل InstallFinalize يؤدي إلى فشل لأن التطبيق على شبكة الإنترنت غير متوفر حتى بعد ذلك.

وبفضل كريس الجحور لالمثال الصحيح للعثور على تنفيذ aspnet_regiis (جوجل "عن طريق WIX لتأمين اتصال سلسلة").

وJB

لا تنسى لتمكين 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"/>

هنا هو السؤال-SOF

وجوابي هو أساسا نفس الآخرين ينظر هنا. أردت فقط أن تقدم للناس مثالا آخر.

ونظرا لعدد من ملحقات الملفات التي 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="&quot;[NETFRAMEWORK40FULLINSTALLROOTDIR]aspnet_regiis.exe&quot; -norestart -s &quot;W3SVC/[IISWEBSITEID]/ROOT/[IISVDIRNAME]&quot;" />
    <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>

وهذا هو أبسط قليلا. أنا لا أعرف إذا كان هذا يعمل على تحديث وAppPool القائمة، ولكنها تعمل لإنشاء بركة APP ووضع نسخة .NET.

<iis:WebServiceExtension Id="AMS_AppPool" Name="AccountManagementSVC1" Identity="other"  ManagedPipelineMode="integrated" ManagedRuntimeVersion="v4.0" User="AMS_AppPoolUser" RecycleMinutes="120" />

ولقد وجدت طريقة مختلفة باستخدام WIX WebApplicationExtension. يمكنك التحقق من الحل الكامل هنا و هنا .

وأنا أحب WIX حتى الآن، ولكن الرجل لم يأخذ الكثير من الحفر للعثور على ما كنت أبحث عنه.

  • ابحث أولاً عن مجلد إصدار .NET الصحيح.استخدم DirectorySearch/FileSearch لإجراء البحث.

  • استخدم المسار أعلاه للاتصال بـ aspnet_regiis.exe وتعيين إصدار تطبيق الويب من خلال إجراء مخصص.

    aspnet_regiis.exe -s W3SVC/1/ROOT/SampleApp1

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top