قم بتعيين إصدار ASP.Net باستخدام WiX
سؤال
أقوم بإنشاء برنامج تثبيت لموقع ويب 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"/>
وجوابي هو أساسا نفس الآخرين ينظر هنا. أردت فقط أن تقدم للناس مثالا آخر.
ونظرا لعدد من ملحقات الملفات التي 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>
وهذا هو أبسط قليلا. أنا لا أعرف إذا كان هذا يعمل على تحديث وAppPool القائمة، ولكنها تعمل لإنشاء بركة APP ووضع نسخة .NET.
<iis:WebServiceExtension Id="AMS_AppPool" Name="AccountManagementSVC1" Identity="other" ManagedPipelineMode="integrated" ManagedRuntimeVersion="v4.0" User="AMS_AppPoolUser" RecycleMinutes="120" />
ابحث أولاً عن مجلد إصدار .NET الصحيح.استخدم DirectorySearch/FileSearch لإجراء البحث.
استخدم المسار أعلاه للاتصال بـ aspnet_regiis.exe وتعيين إصدار تطبيق الويب من خلال إجراء مخصص.
aspnet_regiis.exe -s W3SVC/1/ROOT/SampleApp1