
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
	<head><meta forua="true" http-equiv="Cache-Control" content="max-age=0" /></head><card id="MainCard" title="&#x6B22;&#x8FCE;&#x5149;&#x4E34;"><p><a href="wap.asp">&#x6728;&#x5B50;&#x5C4B;</a><br/>&nbsp;</p><p><b>&#x6807;&#x9898;&#x3A;</b> &#x49;&#x6E;&#x6E;&#x6F;&#x20;&#x53;&#x65;&#x74;&#x75;&#x70;&#x68C0;&#x6D4B;&#x5B89;&#x88C5;&#x2E;&#x4E;&#x65;&#x74;&#x20;&#x46;&#x72;&#x61;&#x6D;&#x65;&#x77;&#x6F;&#x72;&#x6B;&#x8FD0;&#x884C;&#x73AF;&#x5883;&#x811A;&#x672C;</p><p><b>&#x4F5C;&#x8005;&#x3A;</b> &#x64;&#x6E;&#x61;&#x77;&#x6F;</p><p><b>&#x65E5;&#x671F;&#x3A;</b> &#x32;&#x30;&#x31;&#x36;&#x2D;&#x31;&#x30;&#x2D;&#x33;&#x31;&#x20;&#x31;&#x31;&#x3A;&#x35;&#x31;&#x20;&#x50;&#x4D;</p><p><b>&#x5206;&#x7C7B;&#x3A;</b> <a href="wap.asp?do=showLog&amp;cateID=16">&#x57;&#x69;&#x6E;&#x7F16;&#x7A0B;</a></p><p><b>&#x5185;&#x5BB9;&#x3A;</b> 1.&#x672C;&#x5730;&#x5B89;&#x88C5;.Net Framework<br/>&#x590D;&#x5236;&#x5185;&#x5BB9;&#x5230;&#x526A;&#x8D34;&#x677F; &#x7A0B;&#x5E8F;&#x4EE3;&#x7801;[Files]<br/>Source: &#34;G:\myapp\dotnetfx.exe&#34;; Flags: dontcopy noencryption<br/>[Code]<br/>function InitializeSetup(): Boolean;<br/>var ResultCode:Integer;<br/>begin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;if not IsDotNetDetected(&#39;v2.0&#39;, 0) then begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExtractTemporaryFile(&#39;dotnetfx.exe&#39;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exec(ExpandConstant(&#39;{tmp}\dotnetfx.exe&#39;), &#39;&#39;, &#39;&#39;, SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&#x7ECF;&#x6D4B;&#x8BD5;.NET 2.0&#x5B89;&#x88C5;&#x6210;&#x529F;Exec&#x4ECD;&#x8FD4;&#x56DE;false&#xFF0C;&#x6539;&#x7528;IsDotNetDetected&#x518D;&#x68C0;&#x6D4B;&#x4E00;&#x6B21;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if not IsDotNetDetected(&#39;v2.0&#39;, 0) then begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MsgBox(&#39;.Net Framework2.0&#x7EC4;&#x4EF6;&#x5B89;&#x88C5;&#x5931;&#x8D25;&#xFF0C;&#x65E0;&#x6CD5;&#x8FD0;&#x884C;&#x7A0B;&#x5E8F;&#xFF0C;&#x5B89;&#x88C5;&#x7A0B;&#x5E8F;&#x5373;&#x5C06;&#x9000;&#x51FA;&#xFF01;&#39;,mbInformation,MB_OK);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result := false;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end else begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result := true;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br/>&nbsp;&nbsp;&nbsp;&nbsp;end else begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result := true;<br/>&nbsp;&nbsp;&nbsp;&nbsp;end<br/>end;<br/>2.&#x5728;&#x7EBF;&#x4E0B;&#x8F7D;&#x5B89;&#x88C5;.Net Framework<br/>&#x590D;&#x5236;&#x5185;&#x5BB9;&#x5230;&#x526A;&#x8D34;&#x677F; &#x7A0B;&#x5E8F;&#x4EE3;&#x7801;[Code]<br/>function InitializeSetup(): Boolean;<br/>var IEPath, NetV2DownUrl:string;<br/>var ResultCode:Integer;<br/>begin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;if not IsDotNetDetected(&#39;v2.0&#39;, 0) then begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if MsgBox(&#39;&#x7CFB;&#x7EDF;&#x7F3A;&#x5C11;&#x7A0B;&#x5E8F;&#x8FD0;&#x884C;&#x7EC4;&#x4EF6;.Net Framework 2.0&#xFF0C;&#x662F;&#x5426;&#x7ACB;&#x523B;&#x4E0B;&#x8F7D;&#x5E76;&#x5B89;&#x88C5;&#xFF1F;&#39;, mbConfirmation, MB_YESNO) = idYes then begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if IsWin64 then begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NetV2DownUrl := &#39;https://download.microsoft.com/download/c/6/e/c6e88215-0178-4c6c-b5f3-158ff77b1f38/NetFx20SP2_x64.exe&#39;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end else begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NetV2DownUrl := &#39;https://download.microsoft.com/download/c/6/e/c6e88215-0178-4c6c-b5f3-158ff77b1f38/NetFx20SP2_x86.exe&#39;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IEPath := ExpandConstant(&#39;{pf}\Internet Explorer\iexplore.exe&#39;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exec(IEPath, NetV2DownUrl, &#39;&#39; , SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MsgBox(&#39;&#x4E0B;&#x8F7D;&#x5B89;&#x88C5;&#x597D;.Net Framework2.0&#x7EC4;&#x4EF6;&#x540E;&#xFF0C;&#x91CD;&#x65B0;&#x8FD0;&#x884C;&#x672C;&#x7A0B;&#x5E8F;&#x7EE7;&#x7EED;&#x5B89;&#x88C5;&#xFF01;&#39;,mbInformation,MB_OK);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result := false;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end else begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MsgBox(&#39;&#x6CA1;&#x6709;&#x5B89;&#x88C5;.Net Framework2.0&#x7EC4;&#x4EF6;&#xFF0C;&#x65E0;&#x6CD5;&#x8FD0;&#x884C;&#x7A0B;&#x5E8F;&#xFF0C;&#x5B89;&#x88C5;&#x7A0B;&#x5E8F;&#x5373;&#x5C06;&#x9000;&#x51FA;&#xFF01;&#39;,mbInformation,MB_OK);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result := false;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br/>&nbsp;&nbsp;&nbsp;&nbsp;end else begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result := true;<br/>&nbsp;&nbsp;&nbsp;&nbsp;end<br/>end;<br/>&#x9644;&#xFF1A;Inno Setup &#x68C0;&#x6D4B;&#x5DF2;&#x5B89;&#x88C5;&#x7684;.NET Framework &#x7248;&#x672C;(&#x590D;&#x5236;&#x5230;Code&#x8282;&#x70B9;)<br/>&#x590D;&#x5236;&#x5185;&#x5BB9;&#x5230;&#x526A;&#x8D34;&#x677F; &#x7A0B;&#x5E8F;&#x4EE3;&#x7801;function IsDotNetDetected(version: string; service: cardinal): boolean;<br/>// Indicates whether the specified version and service pack of the .NET Framework is installed.<br/>//<br/>// version -- Specify one of these strings for the required .NET Framework version:<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&#39;v1.1&#39;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.NET Framework 1.1<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&#39;v2.0&#39;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.NET Framework 2.0<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&#39;v3.0&#39;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.NET Framework 3.0<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&#39;v3.5&#39;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.NET Framework 3.5<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&#39;v4\Client&#39;&nbsp;&nbsp;&nbsp;&nbsp; .NET Framework 4.0 Client Profile<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&#39;v4\Full&#39;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .NET Framework 4.0 Full Installation<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&#39;v4.5&#39;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.NET Framework 4.5<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&#39;v4.5.1&#39;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.NET Framework 4.5.1<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&#39;v4.5.2&#39;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.NET Framework 4.5.2<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&#39;v4.6&#39;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.NET Framework 4.6<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&#39;v4.6.1&#39;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.NET Framework 4.6.1<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&#39;v4.6.2&#39;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.NET Framework 4.6.2<br/>//<br/>// service -- Specify any non-negative integer for the required service pack level:<br/>//&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; No service packs required<br/>//&nbsp;&nbsp;&nbsp;&nbsp;1, 2, etc.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Service pack 1, 2, etc. required<br/>var<br/>&nbsp;&nbsp;&nbsp;&nbsp;key, versionKey: string;<br/>&nbsp;&nbsp;&nbsp;&nbsp;install, release, serviceCount, versionRelease: cardinal;<br/>&nbsp;&nbsp;&nbsp;&nbsp;success: boolean;<br/>begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;versionKey := version;<br/>&nbsp;&nbsp;&nbsp;&nbsp;versionRelease := 0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;// .NET 1.1 and 2.0 embed release number in version key<br/>&nbsp;&nbsp;&nbsp;&nbsp;if version = &#39;v1.1&#39; then begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;versionKey := &#39;v1.1.4322&#39;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;end else if version = &#39;v2.0&#39; then begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;versionKey := &#39;v2.0.50727&#39;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;end<br/>&nbsp;&nbsp;&nbsp;&nbsp;// .NET 4.5 and newer install as up&#100;ate to .NET 4.0 Full<br/>&nbsp;&nbsp;&nbsp;&nbsp;else if Pos(&#39;v4.&#39;, version) = 1 then begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;versionKey := &#39;v4\Full&#39;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case version of<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;v4.5&#39;:&nbsp;&nbsp; versionRelease := 378389;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;v4.5.1&#39;: versionRelease := 378675; // 378758 on Windows 8 and older<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;v4.5.2&#39;: versionRelease := 379893;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;v4.6&#39;:&nbsp;&nbsp; versionRelease := 393295; // 393297 on Windows 8.1 and older<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;v4.6.1&#39;: versionRelease := 394254; // 394271 on Windows 8.1 and older<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;v4.6.2&#39;: versionRelease := 394802; // 394806 on Windows 8.1 and older<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br/>&nbsp;&nbsp;&nbsp;&nbsp;end;<br/>&nbsp;&nbsp;&nbsp;&nbsp;// installation key group for all .NET versions<br/>&nbsp;&nbsp;&nbsp;&nbsp;key := &#39;SOFTWARE\Microsoft\NET Framework Setup\NDP\&#39; + versionKey;<br/>&nbsp;&nbsp;&nbsp;&nbsp;// .NET 3.0 uses value InstallSuccess in subkey Setup<br/>&nbsp;&nbsp;&nbsp;&nbsp;if Pos(&#39;v3.0&#39;, version) = 1 then begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;success := RegQueryDWordValue(HKLM, key + &#39;\Setup&#39;, &#39;InstallSuccess&#39;, install);<br/>&nbsp;&nbsp;&nbsp;&nbsp;end else begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;success := RegQueryDWordValue(HKLM, key, &#39;Install&#39;, install);<br/>&nbsp;&nbsp;&nbsp;&nbsp;end;<br/>&nbsp;&nbsp;&nbsp;&nbsp;// .NET 4.0 and newer use value Servicing instead of SP<br/>&nbsp;&nbsp;&nbsp;&nbsp;if Pos(&#39;v4&#39;, version) = 1 then begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;success := success and RegQueryDWordValue(HKLM, key, &#39;Servicing&#39;, serviceCount);<br/>&nbsp;&nbsp;&nbsp;&nbsp;end else begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;success := success and RegQueryDWordValue(HKLM, key, &#39;SP&#39;, serviceCount);<br/>&nbsp;&nbsp;&nbsp;&nbsp;end;<br/>&nbsp;&nbsp;&nbsp;&nbsp;// .NET 4.5 and newer use additional value Release<br/>&nbsp;&nbsp;&nbsp;&nbsp;if versionRelease &gt; 0 then begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;success := success and RegQueryDWordValue(HKLM, key, &#39;Release&#39;, release);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;success := success and (release &gt;= versionRelease);<br/>&nbsp;&nbsp;&nbsp;&nbsp;end;<br/>&nbsp;&nbsp;&nbsp;&nbsp;result := success and (install = 1) and (serviceCount &gt;= service);<br/>end;<br/>&#x76F8;&#x5173;&#x94FE;&#x63A5;<br/>[1].&#x7528;Inno Setup&#x6765;&#x89E3;&#x51B3;.NetFramework&#x5B89;&#x88C5;&#x95EE;&#x9898;&#xFF1A;http://zhoufoxcn.blog.51cto.com/792419/279243/<br/>[2].&#x4F7F;&#x7528;Inno Setup &#x6253;&#x5305;.NET&#x7A0B;&#x5E8F;,&#x5E76;&#x81EA;&#x52A8;&#x5B89;&#x88C5;.Net Framework&#xFF1A;http://www.cnblogs.com/xiaogangqq123/archive/2012/03/19/2405730.html</p><p> + <a href="#CommentCard">&#x67E5;&#x770B;&#x5F53;&#x524D;&#x65E5;&#x5FD7;&#x8BC4;&#x8BBA;</a> (0)</p><p>&nbsp;<br/><br/><a href="wap.asp?do=Login">&#x767B;&#x5F55;</a></p><p><br/>&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;</p><p><a href="wap.asp">&#x6728;&#x5B50;&#x5C4B;</a></p><p><a href="http://www.pjhome.net/wap.asp">PJBlog3&nbsp;v3.2.9.518</a>&nbsp;Inside.</p><p>Processed&nbsp;In&nbsp;0.609&nbsp;ms</p><do type="prev" label="&#x8FD4;&#x56DE;"><prev/></do></card><card id="postCommentCard"><p><b>&#x6807;&#x9898;&#x3A;</b> <a href="#MainCard">&#x49;&#x6E;&#x6E;&#x6F;&#x20;&#x53;&#x65;&#x74;&#x75;&#x70;&#x68C0;&#x6D4B;&#x5B89;&#x88C5;&#x2E;&#x4E;&#x65;&#x74;&#x20;&#x46;&#x72;&#x61;&#x6D;&#x65;&#x77;&#x6F;&#x72;&#x6B;&#x8FD0;&#x884C;&#x73AF;&#x5883;&#x811A;&#x672C;</a></p><p><br/>你没有权限发表评论</p><p><br/>&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;</p><p><a href="wap.asp">&#x6728;&#x5B50;&#x5C4B;</a></p><p><a href="http://www.pjhome.net/wap.asp">PJBlog3&nbsp;v3.2.9.518</a>&nbsp;Inside.</p><p>Processed&nbsp;In&nbsp;0.609&nbsp;ms</p><do type="prev" label="&#x8FD4;&#x56DE;"><prev/></do></card><card id="CommentCard"><p>&#x6682;&#x65E0;&#x8BC4;&#x8BBA;</p><p><a href="#MainCard">&#x8FD4;&#x56DE;</a></p><p><br/>&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;</p><p><a href="wap.asp">&#x6728;&#x5B50;&#x5C4B;</a></p><p><a href="http://www.pjhome.net/wap.asp">PJBlog3&nbsp;v3.2.9.518</a>&nbsp;Inside.</p><p>Processed&nbsp;In&nbsp;0.609&nbsp;ms</p><do type="prev" label="&#x8FD4;&#x56DE;"><prev/></do></card>
</wml>
