【转】bootstrap 轮播图片

<pre class="brush:html;toolbar:false">&lt;!DOCTYPE&nbsp;html&gt; &lt;html&gt; &lt;head&gt; &nbsp;&nbsp;&lt;title&gt;Bootstrap&nbsp;实例&lt;/title&gt; &nbsp;&nbsp;&lt;meta&nbsp;charset=&quot;utf-8&quot;&gt; &nbsp;&nbsp;&lt;meta&nbsp;name=&quot;viewport&quot;&nbsp;content=&quot;width=device-width,&nbsp;initial-scale=1&quot;&gt; &nbsp;&nbsp;&lt;link&nbsp;rel=&quot;stylesheet&quot;&nbsp;href=&quot;https://cdn.staticfile.org/twitter-bootstrap/4.3.1/css/bootstrap.min.css&quot;&gt; &nbsp;&nbsp;&lt;script&nbsp;src=&quot;https://cdn.staticfile.org/jquery/3.2.1/jquery.min.js&quot;&gt;&lt;/script&gt; &nbsp;&nbsp;&lt;script&nbsp;src=&quot;https://cdn.staticfile.org/popper.js/1.15.0/umd/popper.min.js&quot;&gt;&lt;/script&gt; &nbsp;&nbsp;&lt;script&nbsp;src=&quot;https://cdn.staticfile.org/twitter-bootstrap/4.3.1/js/bootstrap.min.js&quot;&gt;&lt;/script&gt; &nbsp;&nbsp;&lt;style&gt; &nbsp;&nbsp;/*&nbsp;Make&nbsp;the&nbsp;image&nbsp;fully&nbsp;responsive&nbsp;*/ &nbsp;&nbsp;.carousel-inner&nbsp;img&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width:&nbsp;100%; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;height:&nbsp;100%; &nbsp;&nbsp;} &nbsp;&nbsp;&lt;/style&gt; &lt;/head&gt; &lt;body&gt; &lt;div&nbsp;id=&quot;demo&quot;&nbsp;class=&quot;carousel&nbsp;slide&quot;&nbsp;data-ride=&quot;carousel&quot;&gt; &nbsp; &nbsp;&nbsp;&lt;!--&nbsp;指示符&nbsp;--&gt; &nbsp;&nbsp;&lt;ul&nbsp;class=&quot;carousel-indicators&quot;&gt; &nbsp;&nbsp;&nbsp;&nbsp;&lt;li&nbsp;data-target=&quot;#demo&quot;&nbsp;data-slide-to=&quot;0&quot;&nbsp;class=&quot;active&quot;&gt;&lt;/li&gt; &nbsp;&nbsp;&nbsp;&nbsp;&lt;li&nbsp;data-target=&quot;#demo&quot;&nbsp;data-slide-to=&quot;1&quot;&gt;&lt;/li&gt; &nbsp;&nbsp;&nbsp;&nbsp;&lt;li&nbsp;data-target=&quot;#demo&quot;&nbsp;data-slide-to=&quot;2&quot;&gt;&lt;/li&gt; &nbsp;&nbsp;&lt;/ul&gt; &nbsp; &nbsp;&nbsp;&lt;!--&nbsp;轮播图片&nbsp;--&gt; &nbsp;&nbsp;&lt;div&nbsp;class=&quot;carousel-inner&quot;&gt; &nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;class=&quot;carousel-item&nbsp;active&quot;&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;img&nbsp;src=&quot;https://static.runoob.com/images/mix/img_fjords_wide.jpg&quot;&gt; &nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt; &nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;class=&quot;carousel-item&quot;&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;img&nbsp;src=&quot;https://static.runoob.com/images/mix/img_nature_wide.jpg&quot;&gt; &nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt; &nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;class=&quot;carousel-item&quot;&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;img&nbsp;src=&quot;https://static.runoob.com/images/mix/img_mountains_wide.jpg&quot;&gt; &nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt; &nbsp;&nbsp;&lt;/div&gt; &nbsp; &nbsp;&nbsp;&lt;!--&nbsp;左右切换按钮&nbsp;--&gt; &nbsp;&nbsp;&lt;a&nbsp;class=&quot;carousel-control-prev&quot;&nbsp;href=&quot;#demo&quot;&nbsp;data-slide=&quot;prev&quot;&gt; &nbsp;&nbsp;&nbsp;&nbsp;&lt;span&nbsp;class=&quot;carousel-control-prev-icon&quot;&gt;&lt;/span&gt; &nbsp;&nbsp;&lt;/a&gt; &nbsp;&nbsp;&lt;a&nbsp;class=&quot;carousel-control-next&quot;&nbsp;href=&quot;#demo&quot;&nbsp;data-slide=&quot;next&quot;&gt; &nbsp;&nbsp;&nbsp;&nbsp;&lt;span&nbsp;class=&quot;carousel-control-next-icon&quot;&gt;&lt;/span&gt; &nbsp;&nbsp;&lt;/a&gt; &nbsp; &lt;/div&gt; &lt;/body&gt; &lt;/html&gt;</pre><p>转载:https://www.runoob.com/try/try.php?filename=trybs4_carousel</p>
2020/11/27 16:41:01(zgc) 抢沙发(0) 个人作品
阅读全文

卓越his专用后台划价服务版

<p><img src="/Common/ueditornew/net/upload/image/20201009/6373784127989028917417213.png" title="28113914-QQ截图20200928113746.png"/></p><p><img src="/Common/ueditornew/net/upload/image/20201009/6373784127989028917417213.png" title="28113914-QQ截图20200928113603.png"/></p><p><img src="/Common/ueditornew/net/upload/image/20201009/6373784127989419537417213.png" title="28113914-QQ图片20200928113456.png"/></p><p>后台划价服务版程序,需要。netframwork4.0。<br/></p>
2020/9/28 11:36:54(zgc) 抢沙发(3002) 个人作品
阅读全文

[转,下载]RAD Studio 10.4.1 绿色版

<h5 style="font-size: 18px;">RAD Studio 10.4.1 绿色版</h5><h4 class="dxH4" style="font-size: 15.6px; margin-left: -18px;">一、绿色版介绍</h4><p>绿色版为完全版,没做任何的精简,也没有做任何的改动!<br/><span style="color:red">绿色版不含任何破解,仅供研究,24小时后请自行删除,如需继续使用RAD Studio,请购买正版。</span><br/></p><h4 class="dxH4" style="font-size: 15.6px; margin-left: -18px;">二、绿色版文件包说明</h4><p>绿色版共包含4个文件包,分别为:<br/>dotnetfx45_full_x86_x64.exe:Microsoft .NET Framework 4.5,必选<br/>RAD Studio 10.4.1 绿色版.7z:基础包,必选<br/>RAD Studio 10.4.1 PlatformSDKs.7z:Android SDK、Android NDK,可选<br/>RAD Studio 10.4 Green 1.3.rar:绿化程序,必选<br/></p><h4 class="dxH4" style="font-size: 15.6px; margin-left: -18px;">三、绿色版使用说明</h4><ol class=" list-paddingleft-2"><li><p>安装Microsoft .NET Framework 4.5,只安装一次即可,Windows 10已自带,可以跳过此步</p></li><li><p>解压RAD Studio 10.4.1 绿色版.7z到任意目录</p></li><li><p>解压RAD Studio 10.4.1 PlatformSDKs.7z解压到绿色版的Extra目录(10.4\Extra\CatalogRepository\)</p></li><li><p>解压RAD Studio 10.4 Green 1.3.rar解压到绿色版目录下(10.4\RADStudioSydneyGreen.exe)</p></li><li><p>运行RADStudioSydneyGreen.exe可实现绿化和卸载</p></li></ol><h4 class="dxH4" style="font-size: 15.6px; margin-left: -18px;">四、下载地址</h4><p>Microsoft .NET Framework 4.5 官方下载地址:<br/>下载地址:<a href="http://download.microsoft.com/download/b/a/4/ba4a7e71-2906-4b2d-a0e1-80cf16844f5f/dotnetfx45_full_x86_x64.exe" target="_blank">http://download.microsoft.com/download/b/a/4/ba4a7e71-2906-4b2d-a0e1-80cf16844f5f/dotnetfx45_full_x86_x64.exe</a><br/><br/>RAD Studio 10.4.1 绿色版.7z(3.72GB,解压后26.1GB)<br/>下载地址:<a href="https://pan.baidu.com/s/11qqa2xFEMdioJadubYTxlw" target="_blank">https://pan.baidu.com/s/11qqa2xFEMdioJadubYTxlw</a><br/>提取码:6zgb<br/>MD5: AA61F76E00D2EC202A83344BBFC1619F<br/>SHA1: 3C5A8A0404432D772A3391A23251535800BD0C0E<br/><br/>RAD Studio 10.4.1 PlatformSDKs.7z(2.31GB,解压后5.91GB)<br/>下载地址:<a href="https://pan.baidu.com/s/1Q1WjNYNhGMb_ZBgNFiTj5g" target="_blank">https://pan.baidu.com/s/1Q1WjNYNhGMb_ZBgNFiTj5g</a><br/>提取码:adbd<br/>MD5: EE4A98349975124DECEBB5191222446D<br/>SHA1: 428629002FC8C9F8E4813A90A908DC54561D81F6<br/><br/>RAD Studio 10.4 Green 1.3.rar(965KB)<br/>下载地址:<a href="https://pan.baidu.com/s/1vEwcKvnwlrunf-TSBg-zBQ" target="_blank">https://pan.baidu.com/s/1vEwcKvnwlrunf-TSBg-zBQ</a><br/>提取码:vxm5<br/>MD5: CEFC40FD95B44F02870D075225C3FE1E<br/>SHA1: 1B602E743BEEC5922B2D349984C6E1E403841217<br/><br/>RAD Studio 10.4 Green Update History<br/>-1.3<br/>&nbsp;&nbsp;&nbsp;&nbsp;支持RAD Studio 10.4.1<br/>-1.2<br/>&nbsp;&nbsp;&nbsp;&nbsp;修正部分环境变量路径错误<br/>-1.1<br/>&nbsp;&nbsp;&nbsp;&nbsp;修正关联文件路径错误<br/>&nbsp;&nbsp;&nbsp;&nbsp;修正帮助文件路径错误<br/>&nbsp;&nbsp;&nbsp;&nbsp;修正卸载会连同10.3一起卸载的错误<br/>-1.0<br/>&nbsp;&nbsp;&nbsp;&nbsp;RAD Studio 10.4 绿化程序第一版<br/></p><hr/><p><span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; background-color: rgb(255, 255, 255);">制作:iny(自由)</span></p><p><br/></p>
2020/9/4 11:57:59(zgc) 抢沙发(840) Delphi技术
阅读全文

delphi 服务管理单元

<pre class="brush:delphi;toolbar:false">unit&nbsp;Unit_SvcMgr; interface uses &nbsp;&nbsp;Windows,SysUtils,SvcMgr,Registry,ADODB,Classes,StrUtils,ActiveX,WinSvc,IniFiles; type &nbsp;&nbsp;TINIReader=class(TObject) &nbsp;&nbsp;private &nbsp;&nbsp;&nbsp;&nbsp;FReader:TIniFile; &nbsp;&nbsp;&nbsp;&nbsp;FInstanceName,FInstanceData,FInstanceLog:&nbsp;string; &nbsp;&nbsp;&nbsp;&nbsp;FPort:&nbsp;string; &nbsp;&nbsp;&nbsp;&nbsp;FInstanceApp:string; &nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;GetLogName:string; &nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;GetAppPath:&nbsp;string; &nbsp;&nbsp;public &nbsp;&nbsp;&nbsp;&nbsp;constructor&nbsp;Create(const&nbsp;FileName:string);overload; &nbsp;&nbsp;&nbsp;&nbsp;destructor&nbsp;Destroy;override; &nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;AppPath:string&nbsp;read&nbsp;GetAppPath; &nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;InstanceName:string&nbsp;read&nbsp;FInstanceName; &nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;InstanceApp:string&nbsp;read&nbsp;FInstanceApp; &nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;InstanceData:string&nbsp;read&nbsp;FInstanceData; &nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;InstanceLog:string&nbsp;read&nbsp;FInstanceLog; &nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;Port:string&nbsp;read&nbsp;FPort; &nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;LogName:string&nbsp;read&nbsp;GetLogName; &nbsp;&nbsp;end; &nbsp;&nbsp;TLsSvcCenter&nbsp;=&nbsp;class(TService) &nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;ServiceStart(Sender:&nbsp;TService;&nbsp;var&nbsp;Started:&nbsp;Boolean); &nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;ServiceStop(Sender:&nbsp;TService;&nbsp;var&nbsp;Stopped:&nbsp;Boolean); &nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;ServiceCreate(Sender:&nbsp;TObject); &nbsp;&nbsp;private &nbsp;&nbsp;&nbsp;&nbsp;FHProcess:THandle; &nbsp;&nbsp;&nbsp;&nbsp;FInstanceName,FCommandLine:string; &nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;Private&nbsp;declarations&nbsp;} &nbsp;&nbsp;public &nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;GetServiceController:&nbsp;TServiceController;&nbsp;override; &nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;Public&nbsp;declarations&nbsp;} &nbsp;&nbsp;end; const &nbsp;&nbsp;_MDACVersion=&#39;数据访问组件版本:&#39;; &nbsp;&nbsp;_InstanceName=&#39;数据库当前实例名:&#39;; &nbsp;&nbsp;_ListenPort=&#39;数据服务访问端口:&#39;; &nbsp;&nbsp;_ServiceCaption=&#39;服务信息&#39;; &nbsp;&nbsp;_ServiceName=&#39;LsSvcCenter&#39;; &nbsp;&nbsp;_ServiceDisplayName=&#39;Ls&nbsp;Service&nbsp;Manager&#39;; &nbsp;&nbsp;_SectionName=&#39;ServerCnfg&#39;; &nbsp;&nbsp;_DefaultLocalTestConnStr=&#39;Provider=SQLOLEDB.1;Persist&nbsp;Security&nbsp;Info=True;User&nbsp;ID=sa;Initial&nbsp;Catalog=master;Data&nbsp;Source=127.0.0.1,&#39;; &nbsp;&nbsp; var &nbsp;&nbsp;LsSvcCenter:&nbsp;TLsSvcCenter; implementation {$R&nbsp;*.DFM} {&nbsp;TINIReader&nbsp;} function&nbsp;FileNameToLong(const&nbsp;AFileName:&nbsp;string):&nbsp;string; var &nbsp;&nbsp;Buf:&nbsp;PChar; &nbsp;&nbsp;BufSize:&nbsp;Integer; begin &nbsp;&nbsp;BufSize&nbsp;:=&nbsp;GetShortPathName(PChar(AFileName),&nbsp;nil,&nbsp;0)&nbsp;+&nbsp;1; &nbsp;&nbsp;GetMem(Buf,&nbsp;BufSize); &nbsp;&nbsp;try &nbsp;&nbsp;&nbsp;&nbsp;GetShortPathName(PChar(AFileName),&nbsp;Buf,&nbsp;BufSize); &nbsp;&nbsp;&nbsp;&nbsp;Result&nbsp;:=&nbsp;Buf; &nbsp;&nbsp;finally &nbsp;&nbsp;&nbsp;&nbsp;FreeMem(Buf); &nbsp;&nbsp;end; end; constructor&nbsp;TINIReader.Create(const&nbsp;FileName:string); begin &nbsp;&nbsp;FReader:=TIniFile.Create(FileName); &nbsp;&nbsp;try &nbsp;&nbsp;&nbsp;&nbsp;FInstanceApp:=FileNameToLong(AppPath+&#39;BINN\&#39;)+&#39;sqlservr.exe&#39;; &nbsp;&nbsp;&nbsp;&nbsp;FInstanceData:=FileNameToLong(AppPath+&#39;DATA\&#39;); &nbsp;&nbsp;&nbsp;&nbsp;FInstanceLog:=FileNameToLong(AppPath+&#39;LOG\&#39;); &nbsp;&nbsp;&nbsp;&nbsp;FInstanceName:=FReader.ReadString(_SectionName,&#39;InstanceName&#39;,&#39;LSSOFT&#39;); &nbsp;&nbsp;&nbsp;&nbsp;FPort:=FReader.ReadString(_SectionName,&#39;Port&#39;,&#39;17717&#39;); &nbsp;&nbsp;finally &nbsp;&nbsp;&nbsp;&nbsp;FreeAndNil(FReader); &nbsp;&nbsp;end; end; destructor&nbsp;TINIReader.Destroy; begin &nbsp;&nbsp;inherited; end; function&nbsp;TINIReader.GetAppPath:&nbsp;string; begin &nbsp;&nbsp;Result:=ExtractFilePath(ParamStr(0)); end; function&nbsp;TINIReader.GetLogName:&nbsp;string; begin &nbsp;&nbsp;Result:=AppPath+&#39;LOG\Log.TXT&#39;; end; procedure&nbsp;WriteLog(S:&nbsp;string); var &nbsp;&nbsp;FHandle:&nbsp;THandle; &nbsp;&nbsp;i:&nbsp;integer; begin &nbsp;&nbsp;try &nbsp;&nbsp;&nbsp;&nbsp;FHandle&nbsp;:=&nbsp;CreateFile(PChar(ExtractFilePath(ParamStr(0))+&#39;Log.txt&#39;),&nbsp;GENERIC_WRITE, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;nil,&nbsp;OPEN_EXISTING,&nbsp;FILE_ATTRIBUTE_NORMAL,&nbsp;0); &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(FHandle&nbsp;=&nbsp;0)&nbsp;or&nbsp;(FHandle&nbsp;=&nbsp;INVALID_HANDLE_VALUE)&nbsp;then &nbsp;&nbsp;&nbsp;&nbsp;begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FHandle&nbsp;:=&nbsp;CreateFile(PChar(ExtractFilePath(ParamStr(0))+&#39;Log.txt&#39;),&nbsp;GENERIC_WRITE, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;nil,&nbsp;CREATE_ALWAYS,&nbsp;FILE_ATTRIBUTE_NORMAL,&nbsp;0); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(FHandle&nbsp;=&nbsp;0)&nbsp;or&nbsp;(FHandle&nbsp;=&nbsp;INVALID_HANDLE_VALUE)&nbsp;then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end; &nbsp;&nbsp;&nbsp;&nbsp;end; &nbsp;&nbsp;&nbsp;&nbsp;SetFilePointer(FHandle,&nbsp;0,&nbsp;nil,&nbsp;FILE_END); &nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;:=&nbsp;FormatDateTime(&#39;yyyy-mm-dd&nbsp;hh:nn:ss&nbsp;&#39;,&nbsp;NOW)+s&nbsp;+&nbsp;#13#10; &nbsp;&nbsp;&nbsp;&nbsp;WriteFile(FHandle,&nbsp;s[1],&nbsp;Length(s),&nbsp;LongWord(i),&nbsp;nil); &nbsp;&nbsp;&nbsp;&nbsp;CloseHandle(FHandle); &nbsp;&nbsp;except &nbsp;&nbsp;end; end; function&nbsp;GetMDACVersion:&nbsp;string; var &nbsp;&nbsp;RegReader:TRegistry; begin &nbsp;&nbsp;RegReader:=TRegistry.Create; &nbsp;&nbsp;try &nbsp;&nbsp;&nbsp;&nbsp;RegReader.RootKey:=HKEY_LOCAL_MACHINE; &nbsp;&nbsp;&nbsp;&nbsp;RegReader.OpenKey(&#39;SOFTWARE\Microsoft\DataAccess&#39;,False); &nbsp;&nbsp;&nbsp;&nbsp;Result:=RegReader.ReadString(&#39;FullInstallVer&#39;); &nbsp;&nbsp;&nbsp;&nbsp;RegReader.CloseKey; &nbsp;&nbsp;finally &nbsp;&nbsp;&nbsp;&nbsp;FreeAndNil(RegReader); &nbsp;&nbsp;end; end; function&nbsp;InstallService(const&nbsp;ServiceName,DisplayName:string):Boolean; var &nbsp;&nbsp;Mgr,Svc:integer; begin &nbsp;&nbsp;Mgr:=OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS); &nbsp;&nbsp;if&nbsp;Mgr&lt;&gt;0&nbsp;then &nbsp;&nbsp;begin &nbsp;&nbsp;&nbsp;&nbsp;Svc:=WinExec(PChar(&#39;sc&nbsp;create&nbsp;&#39;+ServiceName+&#39;&nbsp;binpath=&nbsp;&quot;&#39;+ExtractFilePath(ParamStr(0))+&#39;LsServer.exe&quot;&#39;+&#39;&nbsp;start=&nbsp;auto&nbsp;DisplayName=&nbsp;&quot;&#39;+DisplayName+&#39;&quot;&#39;),SW_HIDE); &nbsp;&nbsp;&nbsp;&nbsp;Result:=Svc&gt;31; &nbsp;&nbsp;&nbsp;&nbsp;CloseServiceHandle(Mgr); &nbsp;&nbsp;end&nbsp;else&nbsp;Result:=False; end; function&nbsp;StopService(const&nbsp;ServiceName:string):Boolean; var &nbsp;&nbsp;Mgr,&nbsp;Svc:&nbsp;Integer; &nbsp;&nbsp;SvcState:TServiceStatus; begin &nbsp;&nbsp;Result:=True; &nbsp;&nbsp;try &nbsp;&nbsp;&nbsp;&nbsp;Mgr:=OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS); &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;Mgr&lt;&gt;0&nbsp;then &nbsp;&nbsp;&nbsp;&nbsp;begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Svc&nbsp;:=&nbsp;OpenService(Mgr,&nbsp;PChar(ServiceName),&nbsp;SERVICE_ALL_ACCESS); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;Svc&lt;&gt;0&nbsp;then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;QueryServiceStatus(Svc,SvcState)&nbsp;then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;SvcState.dwCurrentState=SERVICE_RUNNING&nbsp;then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ControlService(Svc,SERVICE_CONTROL_STOP,SvcState); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CloseServiceHandle(Svc); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CloseServiceHandle(Mgr); &nbsp;&nbsp;&nbsp;&nbsp;end; &nbsp;&nbsp;except&nbsp;on&nbsp;E:Exception&nbsp;do &nbsp;&nbsp;&nbsp;&nbsp;begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteLog(E.Message); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result:=False; &nbsp;&nbsp;&nbsp;&nbsp;end; &nbsp;&nbsp;end; end; function&nbsp;_StartService(const&nbsp;ServiceName:string):Boolean; var &nbsp;&nbsp;Mgr,&nbsp;Svc:&nbsp;Integer; &nbsp;&nbsp;SAV:PChar; &nbsp;&nbsp;SvcState:TServiceStatus; begin &nbsp;&nbsp;Result:=True; &nbsp;&nbsp;try &nbsp;&nbsp;&nbsp;&nbsp;Mgr:=OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS); &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;Mgr&lt;&gt;0&nbsp;then &nbsp;&nbsp;&nbsp;&nbsp;begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Svc&nbsp;:=&nbsp;OpenService(Mgr,&nbsp;PChar(ServiceName),&nbsp;SERVICE_ALL_ACCESS); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;Svc&lt;&gt;0&nbsp;then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;QueryServiceStatus(Svc,SvcState)&nbsp;then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;SvcState.dwCurrentState=SERVICE_STOPPED&nbsp;then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StartService(Svc,0,SAV); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CloseServiceHandle(Svc); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//如果服务不存在一直安装服务 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;True&nbsp;do &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InstallService(_ServiceName,_ServiceDisplayName); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Svc&nbsp;:=&nbsp;OpenService(Mgr,&nbsp;PChar(ServiceName),&nbsp;SERVICE_ALL_ACCESS); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;Svc&lt;&gt;0&nbsp;then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;QueryServiceStatus(Svc,SvcState)&nbsp;then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;SvcState.dwCurrentState=SERVICE_STOPPED&nbsp;then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StartService(Svc,0,SAV); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CloseServiceHandle(Svc); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Break; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sleep(2000); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CloseServiceHandle(Mgr); &nbsp;&nbsp;&nbsp;&nbsp;end; &nbsp;&nbsp;except&nbsp;on&nbsp;E:Exception&nbsp;do &nbsp;&nbsp;&nbsp;&nbsp;begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteLog(E.Message); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result:=False; &nbsp;&nbsp;&nbsp;&nbsp;end; &nbsp;&nbsp;end; end; function&nbsp;UnInstallService(const&nbsp;ServiceName:string):Boolean; var &nbsp;&nbsp;Mgr,&nbsp;Svc:&nbsp;Integer; &nbsp;&nbsp;SvcState:TServiceStatus; begin &nbsp;&nbsp;Result:=True; &nbsp;&nbsp;try &nbsp;&nbsp;&nbsp;&nbsp;Mgr:=OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS); &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;Mgr&lt;&gt;0&nbsp;then &nbsp;&nbsp;&nbsp;&nbsp;begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Svc&nbsp;:=&nbsp;OpenService(Mgr,&nbsp;PChar(ServiceName),&nbsp;SERVICE_ALL_ACCESS); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;Svc&lt;&gt;0&nbsp;then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;QueryServiceStatus(Svc,SvcState)&nbsp;then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;SvcState.dwCurrentState=SERVICE_RUNNING&nbsp;then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ControlService(Svc,SERVICE_CONTROL_STOP,SvcState); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DeleteService(Svc); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CloseServiceHandle(Svc); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CloseServiceHandle(Mgr); &nbsp;&nbsp;&nbsp;&nbsp;end; &nbsp;&nbsp;except&nbsp;on&nbsp;E:Exception&nbsp;do &nbsp;&nbsp;&nbsp;&nbsp;begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteLog(E.Message); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result:=False; &nbsp;&nbsp;&nbsp;&nbsp;end; &nbsp;&nbsp;end; end; function&nbsp;StartMSSQL(const&nbsp;CommandLine:string;var&nbsp;HProcess:THandle):Boolean; var &nbsp;&nbsp;PROCESSINFORMATION:_PROCESS_INFORMATION; &nbsp;&nbsp;STARTUPINFO:TStartupInfo; begin &nbsp;&nbsp;FillChar(STARTUPINFO,&nbsp;SizeOf(STARTUPINFO),&nbsp;0); &nbsp;&nbsp;STARTUPINFO.cb&nbsp;:=&nbsp;SizeOf(STARTUPINFO); &nbsp;&nbsp;Result:=CreateProcess( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nil, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PChar(CommandLine), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nil, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nil, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;True, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CREATE_NO_WINDOW, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nil, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nil, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STARTUPINFO, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PROCESSINFORMATION); &nbsp;&nbsp;if&nbsp;Result&nbsp;then&nbsp;HProcess:=PROCESSINFORMATION.hProcess; end; function&nbsp;SetupServiceDescription(const&nbsp;SvcName,Description:string):Boolean; var &nbsp;&nbsp;Reg:TRegistry; begin &nbsp;&nbsp;Reg:=TRegistry.Create; &nbsp;&nbsp;try &nbsp;&nbsp;&nbsp;&nbsp;Reg.RootKey:=HKEY_LOCAL_MACHINE; &nbsp;&nbsp;&nbsp;&nbsp;Reg.OpenKey(&#39;SYSTEM\ControlSet001\Services\&#39;+SvcName+&#39;\&#39;,True); &nbsp;&nbsp;&nbsp;&nbsp;Reg.WriteString(&#39;Description&#39;,Description); &nbsp;&nbsp;&nbsp;&nbsp;Reg.CloseKey; &nbsp;&nbsp;&nbsp;&nbsp;Result:=True; &nbsp;&nbsp;finally &nbsp;&nbsp;&nbsp;&nbsp;FreeAndNil(Reg); &nbsp;&nbsp;end; end; function&nbsp;RemoveServiceDescription(const&nbsp;SvcName:string):Boolean; var &nbsp;&nbsp;Reg:TRegistry; begin &nbsp;&nbsp;Reg:=TRegistry.Create; &nbsp;&nbsp;try &nbsp;&nbsp;&nbsp;&nbsp;Reg.RootKey:=HKEY_LOCAL_MACHINE; &nbsp;&nbsp;&nbsp;&nbsp;Reg.OpenKey(&#39;SYSTEM\ControlSet001\Services\&#39;+SvcName+&#39;\&#39;,False); &nbsp;&nbsp;&nbsp;&nbsp;Reg.DeleteValue(&#39;Description&#39;); &nbsp;&nbsp;&nbsp;&nbsp;Reg.DeleteKey(SvcName); &nbsp;&nbsp;&nbsp;&nbsp;Reg.CloseKey; &nbsp;&nbsp;&nbsp;&nbsp;Result:=True; &nbsp;&nbsp;finally &nbsp;&nbsp;&nbsp;&nbsp;FreeAndNil(Reg); &nbsp;&nbsp;end; end; function&nbsp;SetupRegistry(const&nbsp;InstanceName,Port:string):Boolean; var &nbsp;&nbsp;Reg:TRegistry; &nbsp;&nbsp;Buffer:array[0..162]&nbsp;of&nbsp;Char;&nbsp;//ID begin &nbsp;&nbsp;Result:=True; &nbsp;&nbsp;Buffer:=&#39;8022c158ae7d4cd750da034b7dc20c80e66110850d0744b9e3148563a&#39;+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;6613a257dc2ee02c012f12d040bbad9060549ea11a714aec63d6452c5&#39;+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;5e27d82d71307227edf7f0cf15d88d1a1e3222949d7bea02&#39;; &nbsp;&nbsp;Reg:=TRegistry.Create; &nbsp;&nbsp;try &nbsp;&nbsp;&nbsp;&nbsp;Reg.RootKey:=HKEY_LOCAL_MACHINE; &nbsp;&nbsp;&nbsp;&nbsp;Reg.OpenKey(&#39;SOFTWARE\Microsoft\Microsoft&nbsp;SQL&nbsp;Server&#39;,True); &nbsp;&nbsp;&nbsp;&nbsp;Reg.CloseKey; &nbsp;&nbsp;&nbsp;&nbsp;Reg.OpenKey(&#39;SOFTWARE\Microsoft\Microsoft&nbsp;SQL&nbsp;Server\&#39;+InstanceName,True); &nbsp;&nbsp;&nbsp;&nbsp;Reg.CloseKey; &nbsp;&nbsp;&nbsp;&nbsp;Reg.OpenKey(&#39;SOFTWARE\Microsoft\Microsoft&nbsp;SQL&nbsp;Server\&#39;+InstanceName+&#39;\MSSQLServer&#39;,True); &nbsp;&nbsp;&nbsp;&nbsp;Reg.CloseKey; &nbsp;&nbsp;&nbsp;&nbsp;Reg.OpenKey(&#39;SOFTWARE\Microsoft\Microsoft&nbsp;SQL&nbsp;Server\&#39;+InstanceName+&#39;\Setup&#39;,True);//不是必需要的,进程会读取该键值 &nbsp;&nbsp;&nbsp;&nbsp;Reg.CloseKey; &nbsp;&nbsp;&nbsp;&nbsp;Reg.OpenKey(&#39;SOFTWARE\Microsoft\Microsoft&nbsp;SQL&nbsp;Server\&#39;+InstanceName+&#39;\MSSQLServer\CurrentVersion&#39;,True); &nbsp;&nbsp;&nbsp;&nbsp;Reg.WriteBinaryData(&#39;checksum&#39;,Buffer,SizeOf(Buffer)); &nbsp;&nbsp;&nbsp;&nbsp;Reg.WriteString(&#39;CurrentVersion&#39;,&#39;8.00.194&#39;); &nbsp;&nbsp;&nbsp;&nbsp;Reg.CloseKey; &nbsp;&nbsp;&nbsp;&nbsp;Reg.OpenKey(&#39;SOFTWARE\Microsoft\Microsoft&nbsp;SQL&nbsp;Server\&#39;+InstanceName+&#39;\MSSQLServer\SuperSocketNetLib&#39;,True); &nbsp;&nbsp;&nbsp;&nbsp;Reg.CloseKey; &nbsp;&nbsp;&nbsp;&nbsp;Reg.OpenKey(&#39;SOFTWARE\Microsoft\Microsoft&nbsp;SQL&nbsp;Server\&#39;+InstanceName+&#39;\MSSQLServer\SuperSocketNetLib\Np&#39;,True); &nbsp;&nbsp;&nbsp;&nbsp;Reg.WriteString(&#39;PipeName&#39;,&#39;\\.\pipe\MSSQL$&#39;+InstanceName+&#39;\sql\query&#39;); &nbsp;&nbsp;&nbsp;&nbsp;Reg.CloseKey; &nbsp;&nbsp;&nbsp;&nbsp;Reg.OpenKey(&#39;SOFTWARE\Microsoft\Microsoft&nbsp;SQL&nbsp;Server\&#39;+InstanceName+&#39;\MSSQLServer\SuperSocketNetLib\Tcp&#39;,True); &nbsp;&nbsp;&nbsp;&nbsp;Reg.WriteString(&#39;TcpDynamicPorts&#39;,Port); &nbsp;&nbsp;&nbsp;&nbsp;Reg.WriteInteger(&#39;TcpHideFlag&#39;,0); &nbsp;&nbsp;&nbsp;&nbsp;Reg.WriteString(&#39;TcpPort&#39;,Port); &nbsp;&nbsp;&nbsp;&nbsp;Reg.CloseKey; &nbsp;&nbsp;finally &nbsp;&nbsp;&nbsp;&nbsp;FreeAndNil(Reg); &nbsp;&nbsp;end; end; function&nbsp;LocalADOTest(const&nbsp;ConnStr,LogName,ServerName:string):&nbsp;Boolean; var &nbsp;&nbsp;FADOExec:TADOQuery; &nbsp;&nbsp;FADOConnection:TADOConnection; &nbsp;&nbsp;DBList:TStringList; &nbsp;&nbsp;i,j:integer; &nbsp;&nbsp;S:string; &nbsp;&nbsp;function&nbsp;ExtractDBName(S:string):string; &nbsp;&nbsp;var &nbsp;&nbsp;&nbsp;&nbsp;Pos:integer; &nbsp;&nbsp;begin &nbsp;&nbsp;&nbsp;&nbsp;Pos:=LastDelimiter(&#39;.&#39;,S); &nbsp;&nbsp;&nbsp;&nbsp;Result:=MidBStr(S,0,Pos-1); &nbsp;&nbsp;end; &nbsp;&nbsp;function&nbsp;IsFileUsing(const&nbsp;AName:&nbsp;string):&nbsp;Boolean; &nbsp;&nbsp;var &nbsp;&nbsp;&nbsp;&nbsp;HFileRes:&nbsp;HFILE; &nbsp;&nbsp;begin &nbsp;&nbsp;&nbsp;&nbsp;Result&nbsp;:=&nbsp;False; &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;not&nbsp;FileExists(AName)&nbsp;then&nbsp;Exit; &nbsp;&nbsp;&nbsp;&nbsp;HFileRes&nbsp;:=&nbsp;CreateFile(PCHAR(AName),&nbsp;GENERIC_READ&nbsp;or&nbsp;GENERIC_WRITE, &nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;nil,&nbsp;OPEN_EXISTING,&nbsp;FILE_ATTRIBUTE_NORMAL,&nbsp;0); &nbsp;&nbsp;&nbsp;&nbsp;Result&nbsp;:=&nbsp;(HFileRes&nbsp;=&nbsp;INVALID_HANDLE_VALUE); &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;not&nbsp;Result&nbsp;then&nbsp;CloseHandle(HFileRes); &nbsp;&nbsp;end; &nbsp;&nbsp;procedure&nbsp;GetDBList(StringList:TStringList;FileMask:string); &nbsp;&nbsp;var &nbsp;&nbsp;&nbsp;&nbsp;Dir:string; &nbsp;&nbsp;&nbsp;&nbsp;SearchRec:TSearchRec; &nbsp;&nbsp;begin &nbsp;&nbsp;&nbsp;&nbsp;Dir:=ExtractFilePath(ParamStr(0))+&#39;UDATA\&#39;; &nbsp;&nbsp;&nbsp;&nbsp;FindFirst(Dir+FileMask,faAnyFile,SearchRec); &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;not&nbsp;SameText(SearchRec.Name,&#39;&#39;)&nbsp;then&nbsp;StringList.Add(SearchRec.Name); &nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;FindNext(SearchRec)=0&nbsp;do &nbsp;&nbsp;&nbsp;&nbsp;begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringList.Add(SearchRec.Name); &nbsp;&nbsp;&nbsp;&nbsp;end; &nbsp;&nbsp;end; begin &nbsp;&nbsp;try &nbsp;&nbsp;&nbsp;&nbsp;j:=0; &nbsp;&nbsp;&nbsp;&nbsp;DBList:=TStringList.Create; &nbsp;&nbsp;&nbsp;&nbsp;FADOConnection:=TADOConnection.Create(nil); &nbsp;&nbsp;&nbsp;&nbsp;FADOExec:=TADOQuery.Create(nil); &nbsp;&nbsp;&nbsp;&nbsp;FADOConnection.LoginPrompt:=False; &nbsp;&nbsp;&nbsp;&nbsp;FADOConnection.ConnectionString:=ConnStr; &nbsp;&nbsp;&nbsp;&nbsp;//如果连接失败尝试连接5次 &nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;True&nbsp;do &nbsp;&nbsp;&nbsp;&nbsp;begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Inc(j); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(FADOConnection.Connected)&nbsp;or&nbsp;(j&gt;5)&nbsp;then&nbsp;Break; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sleep(1000); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FADOConnection.Open; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;except &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end; &nbsp;&nbsp;&nbsp;&nbsp;end; &nbsp;&nbsp;&nbsp;&nbsp;try &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;not&nbsp;IsFileUsing(LogName)&nbsp;then&nbsp;DeleteFile(LogName); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DBList.Clear; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetDBList(DBList,&#39;*.MDF&#39;); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;i:=0&nbsp;to&nbsp;DBList.Count-1&nbsp;do &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S:=S+&#39;INSERT&nbsp;INTO&nbsp;sysaltfiles(fileid,groupid,size,maxsize,growth,status,perf,dbid,name,filename)&nbsp;VALUES(1,1,128,-1,10,32770,0,&#39;+InTToStr(i+5)+&#39;,&#39;+QuotedStr(ExtractDBName(DBList[i]))+&#39;,&#39;+QuotedStr(&#39;.\..\&#39;+&#39;UDATA\&#39;+DBList[i])+&#39;)&#39;+#13#10#13#10; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S:=S+&#39;INSERT&nbsp;INTO&nbsp;sysaltfiles(fileid,groupid,size,maxsize,growth,status,perf,dbid,name,filename)&nbsp;VALUES(2,0,128,-1,10,49218,0,&#39;+InTToStr(i+5)+&#39;,&#39;+QuotedStr(ExtractDBName(DBList[i])+&#39;_Log&#39;)+&#39;,&#39;+QuotedStr(&#39;.\..\&#39;+&#39;UDATA\&#39;+ExtractDBName(DBList[i])+&#39;_Log.LDF&#39;)+&#39;)&#39;+#13#10#13#10; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S:=S+&#39;INSERT&nbsp;INTO&nbsp;sysdatabases(name,dbid,mode,status,status2,crdate,reserved,category,cmptlevel,filename)&nbsp;VALUES(&#39;+QuotedStr(ExtractDBName(DBList[i]))+&#39;,&#39;+InTToStr(i+5)+&#39;,0,1077936153,1090519040,GETDATE(),1900-1-1,0,80,&#39;+QuotedStr(&#39;.\..\&#39;+&#39;UDATA\&#39;+DBList[i])+&#39;)&#39;+#13#10#13#10; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FADOExec.SQL.Clear; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FADOExec.SQL.Add(&#39;USE&nbsp;master&#39;); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FADOExec.SQL.Add(&#39;exec&nbsp;sp_configure&nbsp;&#39;&#39;allow&nbsp;updates&#39;&#39;,1&#39;); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FADOExec.Connection:=FADOConnection; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FADOExec.ExecSQL; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sleep(200); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FADOExec.SQL.Clear; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FADOExec.SQL.Add(&#39;RECONFIGURE&nbsp;WITH&nbsp;OVERRIDE&#39;); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FADOExec.Connection:=FADOConnection; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FADOExec.ExecSQL; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sleep(200); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FADOConnection.BeginTrans; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FADOExec.SQL.Clear; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FADOExec.SQL.Add(&#39;DELETE&nbsp;FROM&nbsp;sysdatabases&nbsp;WHERE&nbsp;name&nbsp;NOT&nbsp;IN(&#39;&#39;master&#39;&#39;,&#39;&#39;model&#39;&#39;,&#39;&#39;msdb&#39;&#39;,&#39;&#39;tempdb&#39;&#39;)&#39;); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FADOExec.SQL.Add(&#39;DELETE&nbsp;FROM&nbsp;sysaltfiles&nbsp;WHERE&nbsp;dbid&gt;=5&#39;); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FADOExec.SQL.Add(&#39;UPDATE&nbsp;sysservers&nbsp;SET&nbsp;srvname=&#39;+ServerName+&#39;,datasource=&#39;+ServerName); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;not&nbsp;SameText(S,&#39;&#39;)&nbsp;then&nbsp;FADOExec.SQL.Add(S); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FADOExec.Connection:=FADOConnection; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FADOExec.ExecSQL; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FADOConnection.CommitTrans; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;except&nbsp;on&nbsp;E:Exception&nbsp;do &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FADOConnection.RollbackTrans; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteLog(E.Message); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result:=False; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sleep(200); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FADOExec.SQL.Clear; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FADOExec.SQL.Add(&#39;exec&nbsp;sp_configure&nbsp;&#39;&#39;allow&nbsp;updates&#39;&#39;,0&#39;); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FADOExec.Connection:=FADOConnection; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FADOExec.ExecSQL; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sleep(200); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FADOExec.SQL.Clear; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FADOExec.SQL.Add(&#39;RECONFIGURE&nbsp;WITH&nbsp;OVERRIDE&#39;); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FADOExec.Connection:=FADOConnection; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FADOExec.ExecSQL; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result:=True; &nbsp;&nbsp;&nbsp;&nbsp;finally &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FADOExec.Close; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FADOConnection.Close; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FreeAndNil(FADOExec); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FreeAndNil(FADOConnection); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FreeAndNil(DBList); &nbsp;&nbsp;&nbsp;&nbsp;end; &nbsp;&nbsp;except&nbsp;on&nbsp;E:Exception&nbsp;do &nbsp;&nbsp;&nbsp;&nbsp;begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteLog(E.Message); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result:=False; &nbsp;&nbsp;&nbsp;&nbsp;end; &nbsp;&nbsp;end; end; procedure&nbsp;ServiceController(CtrlCode:&nbsp;DWord);&nbsp;stdcall; begin &nbsp;&nbsp;LsSvcCenter.Controller(CtrlCode); end; function&nbsp;TLsSvcCenter.GetServiceController:&nbsp;TServiceController; begin &nbsp;&nbsp;Result&nbsp;:=&nbsp;ServiceController; end; procedure&nbsp;TLsSvcCenter.ServiceStart(Sender:&nbsp;TService; &nbsp;&nbsp;var&nbsp;Started:&nbsp;Boolean); var &nbsp;&nbsp;FINIReader:TINIReader; begin &nbsp;&nbsp;FINIReader:=TINIReader.Create(ExtractFilePath(ParamStr(0))+&#39;\Config.INI&#39;); &nbsp;&nbsp;try &nbsp;&nbsp;&nbsp;&nbsp;FInstanceName:=FINIReader.InstanceName; &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;SetCurrentDir(ExtractFilePath(ParamStr(0))+&#39;BINN\&#39;)&nbsp;then&nbsp;//一定要设置当前路径 &nbsp;&nbsp;&nbsp;&nbsp;begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetupRegistry(FINIReader.InstanceName,FINIReader.Port);&nbsp;//安装注册表 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sleep(1000); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FCommandLine:=FINIReader.InstanceApp+&#39;&nbsp;-c&nbsp;-d&#39;+FINIReader.InstanceData+&#39;master.mdf&#39;+&#39;&nbsp;-l&#39; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+FINIReader.InstanceData+&#39;mastlog.ldf&#39;+&#39;&nbsp;-e&#39;+FINIReader.InstanceLog+&#39;Log.txt&#39;+&#39;&nbsp;-s&#39; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+FINIReader.InstanceName+&#39;&nbsp;Port=&#39;+FINIReader.Port; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StartMSSQL(FCommandLine,FHProcess);&nbsp;//启动服务 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sleep(6000); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//重新启动数据库 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CoInitialize(nil); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LocalADOTest(_DefaultLocalTestConnStr+FINIReader.Port,FINIReader.LogName,QuotedStr(&#39;127.0.0.1&#39;+&#39;,&#39;+FINIReader.Port)); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CoUninitialize; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Started:=True; &nbsp;&nbsp;&nbsp;&nbsp;end; &nbsp;&nbsp;finally &nbsp;&nbsp;//释放对象 &nbsp;&nbsp;&nbsp;&nbsp;FreeAndNil(FINIReader); &nbsp;&nbsp;end; end; procedure&nbsp;TLsSvcCenter.ServiceStop(Sender:&nbsp;TService; &nbsp;&nbsp;var&nbsp;Stopped:&nbsp;Boolean); begin &nbsp;&nbsp;//卸载注册表 &nbsp;&nbsp;WinExec(PChar(&#39;REG&nbsp;DELETE&nbsp;&#39;+&#39;&quot;HKLM\SOFTWARE\Microsoft\Microsoft&nbsp;SQL&nbsp;Server\&#39;+FInstanceName+&#39;&quot;&nbsp;/f&#39;),SW_HIDE); &nbsp;&nbsp;//停止SQLServer服务器 &nbsp;&nbsp;TerminateProcess(FHProcess,1); &nbsp;&nbsp;// &nbsp;&nbsp;Stopped:=True; end; procedure&nbsp;TLsSvcCenter.ServiceCreate(Sender:&nbsp;TObject); var &nbsp;&nbsp;CmdLine:string; &nbsp;&nbsp;FINIReader:TINIReader; begin &nbsp;&nbsp;CmdLine:=ParamStr(1); &nbsp;&nbsp;if&nbsp;CmdLine=&#39;&#39;&nbsp;then&nbsp;Exit; &nbsp;&nbsp;if&nbsp;SameText(CmdLine,&#39;/IS&#39;)&nbsp;then&nbsp;&nbsp;//安装服务 &nbsp;&nbsp;begin &nbsp;&nbsp;&nbsp;&nbsp;InstallService(_ServiceName,_ServiceDisplayName); &nbsp;&nbsp;&nbsp;&nbsp;SetupServiceDescription(_ServiceName,&#39;LsServer&nbsp;Manager&nbsp;Provider&#39;); &nbsp;&nbsp;end; &nbsp;&nbsp;if&nbsp;SameText(CmdLine,&#39;/US&#39;)&nbsp;then&nbsp;&nbsp;//卸载服务 &nbsp;&nbsp;begin &nbsp;&nbsp;&nbsp;&nbsp;UnInstallService(_ServiceName); &nbsp;&nbsp;&nbsp;&nbsp;RemoveServiceDescription(_ServiceName); &nbsp;&nbsp;end; &nbsp;&nbsp;if&nbsp;SameText(CmdLine,&#39;/SS&#39;)&nbsp;then&nbsp;&nbsp;//停止服务 &nbsp;&nbsp;begin &nbsp;&nbsp;&nbsp;&nbsp;StopService(_ServiceName); &nbsp;&nbsp;end; &nbsp;&nbsp;if&nbsp;SameText(CmdLine,&#39;/LS&#39;)&nbsp;then&nbsp;&nbsp;//启动服务 &nbsp;&nbsp;begin &nbsp;&nbsp;&nbsp;&nbsp;_StartService(_ServiceName); &nbsp;&nbsp;end; &nbsp;&nbsp;if&nbsp;SameText(CmdLine,&#39;/SI&#39;)&nbsp;then&nbsp;&nbsp;//服务信息 &nbsp;&nbsp;begin &nbsp;&nbsp;&nbsp;&nbsp;FINIReader:=TINIReader.Create(ExtractFilePath(ParamStr(0))+&#39;\Config.INI&#39;); &nbsp;&nbsp;&nbsp;&nbsp;try &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(0,PChar(_MDACVersion+GetMDACVersion+&#39;&nbsp;&nbsp;&nbsp;&nbsp;&#39;+#13#10+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_InstanceName+FINIReader.InstanceName+&#39;&nbsp;&nbsp;&nbsp;&nbsp;&#39;+#13#10+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_ListenPort+FINIReader.Port+&#39;&nbsp;&nbsp;&nbsp;&nbsp;&#39;),_ServiceCaption,MB_OK+MB_ICONINFORMATION); &nbsp;&nbsp;&nbsp;&nbsp;finally &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FreeAndNil(FINIReader); &nbsp;&nbsp;&nbsp;&nbsp;end; &nbsp;&nbsp;end; end; end.</pre><p><br/></p>
2020/8/9 18:51:15(zgc) 抢沙发(0) 个人作品
阅读全文

如何在CentOS 8上安装PHP

<p><br/></p><p>PHP是最常用的服务器端编程语言之一。 许多流行的CMS和框架(例如WordPress,Magento和Laravel)都是用PHP构建的。</p><p>在本指南中,我们将讨论如何在<a href="https://www.linuxidc.com/topicnews.aspx?tid=14" target="_blank" title="CentOS" style="color: rgb(179, 43, 213);">CentOS</a>&nbsp;8上安装PHP 7.2、7.3或7.4。在选择要安装的PHP版本之前,请确保您的应用程序支持它。</p><p>我们还将向您展示如何将PHP与Nginx和Apache集成。</p><p><img src="https://www.linuxidc.com/upload/2019_11/19111908207910.png" alt="PHP 7.4 将在两周内发布,支持FFI提高性能" width="940"/></p><h3><strong>在CentOS 8上安装PHP</strong></h3><p>CentOS 8是用PHP 7.2发布的。该版本支持大多数现代PHP应用程序,但从2019年11月起将不再积极维护。较新的PHP版本可以从Remi存储库中获得。</p><p><strong>启用Remi存储库</strong></p><p>如果您要安装发行版稳定的PHP版本7.2,请跳过这一步。如果您希望安装PHP 7.3或7.4,则通过以root用户或具有sudo特权的用户运行以下命令来启用Remi存储库:</p><p>[linuxidc@localhost www.linuxidc.com]$ sudo dnf install dnf-utils http://rpms.remirepo.net/enterprise/remi-release-8.rpm</p><p><img src="https://www.linuxidc.com/upload/2019_11/19111908518717.png" alt="如何在CentOS 8上安装PHP"/></p><p>上面的命令还将启用EPEL存储库。</p><p>安装完成后,请运行以下命令以获取所有可用PHP版本的列表:</p><p>[linuxidc@localhost www.linuxidc.com]$ sudo dnf module list php</p><p>输出将显示所有可用模块的列表,包括关联的AppStream(软件应用流),版本和安装配置文件。</p><pre style="font-size: 1em; font-family: Consolas, Inconsolata, Courier, monospace; margin-top: 1.2em; margin-bottom: 1.2em; line-height: 1.2em;">CentOS-8&nbsp;-&nbsp;AppStream Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stream&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Profiles&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Summary&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; php&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7.2&nbsp;[d]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;common&nbsp;[d],&nbsp;devel,&nbsp;minimal&nbsp;&nbsp;&nbsp;&nbsp;PHP&nbsp;scripting&nbsp;language&nbsp;&nbsp;&nbsp; Remi&#39;s&nbsp;Modular&nbsp;repository&nbsp;for&nbsp;Enterprise&nbsp;Linux&nbsp;8&nbsp;-&nbsp;x86_64 Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stream&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Profiles&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Summary&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; php&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;remi-7.2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;common&nbsp;[d],&nbsp;devel,&nbsp;minimal&nbsp;&nbsp;&nbsp;&nbsp;PHP&nbsp;scripting&nbsp;language&nbsp;&nbsp;&nbsp; php&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;remi-7.3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;common&nbsp;[d],&nbsp;devel,&nbsp;minimal&nbsp;&nbsp;&nbsp;&nbsp;PHP&nbsp;scripting&nbsp;language&nbsp;&nbsp;&nbsp; php&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;remi-7.4&nbsp;[e]&nbsp;&nbsp;&nbsp;&nbsp;common&nbsp;[d],&nbsp;devel,&nbsp;minimal&nbsp;&nbsp;&nbsp;&nbsp;PHP&nbsp;scripting&nbsp;language&nbsp;&nbsp;&nbsp; Hint:&nbsp;[d]efault,&nbsp;[e]nabled,&nbsp;[x]disabled,&nbsp;[i]nstalled</pre><p><img src="https://www.linuxidc.com/upload/2019_11/19111908516406.png" alt="如何在CentOS 8上安装PHP"/></p><p>默认的PHP模块设置为PHP 7.2。 要安装较新的PHP版本,请启用适当的版本:</p><p>PHP 7.3</p><p>sudo dnf module reset php<br/>sudo dnf module enable php:remi-7.3</p><p>PHP 7.4</p><p>sudo dnf module reset php<br/>sudo dnf module enable php:remi-7.4</p><p>您现在可以在CentOS服务器上安装PHP。</p><p><strong>安装PHP</strong></p><p>以下命令将安装PHP和一些最常见的PHP模块:</p><p>sudo dnf install php php-opcache php-gd php-curl php-mysqlnd</p><p>PHP使用FPM作为依赖安装,并用作FastCGI服务器。 启动FPM服务,并使它能够在启动时自动启动:</p><p>sudo systemctl enable --now php-fpm</p><p><strong>配置PHP以与Apache一起使用</strong></p><p>如果您将Apache用作Web服务器,请使用以下命令重新启动httpd服务,您可以使用:</p><p>sudo systemctl restart httpd</p><p><strong>配置PHP以与Nginx一起使用</strong></p><p>默认情况下,PHP FPM以用户apache的身份运行。 为避免权限问题,我们将用户更改为nginx。 为此,请编辑以黄色突出显示的行:</p><p>sudo nano /etc/php-fpm.d/www.conf</p><p>&nbsp;...<br/><span style="background-color: rgb(255, 255, 0);">user = nginx</span><br/>...<br/><span style="background-color: rgb(255, 255, 0);">group = nginx</span></p><p>确保/var/lib/php目录具有正确的所有权:</p><p>chown -R root:nginx /var/lib/php</p><p>完成后,重新启动PHP FPM服务:</p><p>sudo systemctl restart php-fpm</p><p>接下来,编辑Nginx虚拟主机指令,并添加以下位置块,以便Nginx可以处理PHP文件:</p><p>server {</p><p>&nbsp; &nbsp; # . . . other code</p><p><span style="background-color: rgb(255, 255, 0);">&nbsp; &nbsp; location ~ \.php$ {</span><br/><span style="background-color: rgb(255, 255, 0);">&nbsp; &nbsp; &nbsp; &nbsp; try_files $uri =404;</span><br/><span style="background-color: rgb(255, 255, 0);">&nbsp; &nbsp; &nbsp; &nbsp; fastcgi_pass unix:/run/php-fpm/www.sock;</span><br/><span style="background-color: rgb(255, 255, 0);">&nbsp; &nbsp; &nbsp; &nbsp; fastcgi_index index.php;</span><br/><span style="background-color: rgb(255, 255, 0);">&nbsp; &nbsp; &nbsp; &nbsp; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;</span><br/><span style="background-color: rgb(255, 255, 0);">&nbsp; &nbsp; &nbsp; &nbsp; include fastcgi_params;</span><br/><span style="background-color: rgb(255, 255, 0);">&nbsp; &nbsp; }</span><br/>}</p><p>&nbsp;为了使新配置生效,请重新启动Nginx服务:</p><p>sudo systemctl restart nginx</p><p><strong>总结</strong></p><p>可从默认的CentOS 8存储库中安装PHP 7.2。 如果要安装最新版本,则需要启用Remi存储库。</p><p>如果您有任何疑问或反馈,请随时发表评论。</p><p><span style="color: rgb(255, 0, 0);">Linux公社的RSS地址</span>:<a href="https://www.linuxidc.com/rssFeed.aspx" style="color: rgb(179, 43, 213);">https://www.linuxidc.com/rssFeed.aspx</a></p><p><strong>本文永久更新链接地址</strong>:<a href="https://www.linuxidc.com/Linux/2019-11/161445.htm" style="color: rgb(179, 43, 213);">https://www.linuxidc.com/Linux/2019-11/161445.htm</a></p><p><br/></p>
2020/2/27 21:44:10(zgc) 抢沙发(0) 杂项
阅读全文

CentOS8 PHP环境搭建

<p>1,先安装apache:</p><p><br/></p><p>yum install httpd</p><p>配置ServerName,进入httpd.conf文件:</p><p><br/></p><p>vi /etc/httpd/conf/httpd.conf</p><p>防火墙开放80端口外部访问</p><p><br/></p><p>firewall-cmd --permanent --zone=public --add-port=80/tcp //添加80端口</p><p>firewall-cmd --reload //生效</p><p>再查一下是否开启:</p><p><br/></p><p>&nbsp;firewall-cmd --permanent --zone=public --list-ports //查看开放端口列表</p><p>启动apache:</p><p><br/></p><p>systemctl start httpd.service&nbsp;&nbsp;</p><p>2,安装mysql:</p><p><br/></p><p>yum install mysql mysql-server</p><p>启动mysql:</p><p><br/></p><p>systemctl start mysqld.service</p><p>&nbsp;</p><p><br/></p><p>3,安装php</p><p><br/></p><p>yum install php php-devel</p><p>重启apache使php生效</p><p><br/></p><p>systemctl restart httpd.service</p><p>此时可以在目录:/var/www/html/下建立一个PHP文件</p><p><br/></p><p>代码:</p><p><br/></p><p>&lt;?php phpinfo(); ?&gt;</p><p>在浏览器中访问这个文件,就能看到PHP的一些信息</p><p><br/></p><p>安装php 扩展</p><p><br/></p><p>yum install php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc</p><p>安装完扩展之后需要再次重启apache</p><p><br/></p><p>systemctl restart httpd.service</p><p>测试mysql是否链接成功的php代码</p><p><br/></p><p>&lt;?php $servername = &quot;localhost&quot;; $username = &quot;username&quot;; $password = &quot;password&quot;; // 创建连接 $conn = new mysqli($servername, $username, $password); // 检测连接 if ($conn-&gt;connect_error) { die(&quot;连接失败: &quot; . $conn-&gt;connect_error); } echo &quot;连接成功&quot;; ?&gt;</p><p><br/></p><p>可以把上面的代码传入目录/var/www/html/</p><p><br/></p><p>在浏览器中访问该文件如果输出连接成功表示配置ok</p><p><br/></p><p>附:Apache默认配置文件路径:</p><p><br/></p><p>网站的根目录指向/var/www/html 目录</p><p><br/></p><p>主配置文件是/etc/httpd/conf/httpd.conf</p><p><br/></p><p>存储在的/etc/httpd/conf.d/目录</p><p>————————————————</p><p>版权声明:本文为CSDN博主「UniMagic」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。</p><p>原文链接:https://blog.csdn.net/UniMagic/article/details/103655109</p><p><br/></p>
2020/2/27 21:43:32(zgc) 抢沙发(0) 杂项
阅读全文

sql数据库工具

<p>&nbsp;sql数据库管理工具。</p><p>附加、分离、备份、恢复,查询功能。</p>
2020/2/14 20:51:26(zgc) 抢沙发(0) 个人作品
阅读全文

c# 操作ppt

<pre class="brush:c#;toolbar:false">.在项目中添加引用&nbsp;Microsoft&nbsp;PowerPoint&nbsp;14.0&nbsp;Object&nbsp;Library2.&nbsp;using&nbsp;Microsoft.Office.Interop.PowerPoint; 1.创建一个PPT,添加一个空白页 Microsoft.Office.Interop.PowerPoint.Application&nbsp;PPT&nbsp;=&nbsp;new&nbsp;Microsoft.Office.Interop.PowerPoint.Application();//创建PPT应用 Microsoft.Office.Interop.PowerPoint.Presentation&nbsp;MyPres&nbsp;=&nbsp;null;//PPT应用的实例 Microsoft.Office.Interop.PowerPoint.Slide&nbsp;MySlide&nbsp;=&nbsp;null;//PPT中的幻灯片 MyPres&nbsp;=&nbsp;PPT.Presentations.Open(&quot;文件路径&quot;,&nbsp;MsoTriState.msoFalse,&nbsp;MsoTriState.msoFalse,&nbsp;MsoTriState.msoTrue);//此处将一个PPT实例给了MyPres MySlide&nbsp;=&nbsp;MyPres.Slides.Add(1,&nbsp;Microsoft.Office.Interop.PowerPoint.PpSlideLayout.ppLayoutBlank);//像PPT实例中,添加一个空白页,位置是“第一页” 2.向PPT的幻灯片中添加元素 2.1文本框 Microsoft.Office.Interop.PowerPoint.TextRange&nbsp;MyTextRng&nbsp;=&nbsp;null; MySlide.Shapes.AddTextbox(MsoTextOrientation.msoTextOrientationHorizontal,&nbsp;21.5F,&nbsp;365F,&nbsp;670F,&nbsp;270F); MyTextRng&nbsp;=&nbsp;MySlide.Shapes[1].TextFrame.TextRange;//请注意此处Shapes的索引,由于文本框是第一个添加的Shapes,所以此处索引是1。 MyTextRng.Font.NameFarEast&nbsp;=&nbsp;&quot;微软雅黑&quot;;//文本框中,中文的字体&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MyTextRng.Font.NameAscii&nbsp;=&nbsp;&quot;Calibri&quot;;//文本框中,英文和数字的字体&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MyTextRng.Text&nbsp;=&quot;C#生成PPT&quot;;//显示的内容 MyTextRng.Font.Bold&nbsp;=&nbsp;MsoTriState.msoTrue;//是否加粗 MyTextRng.Font.Color.RGB&nbsp;=&nbsp;A+&nbsp;B&nbsp;*&nbsp;256&nbsp;+&nbsp;C&nbsp;*&nbsp;256&nbsp;*&nbsp;256;//字体颜色,其中ABC直接用自定义颜色中的数字代替即可。 MyTextRng.Characters(1,&nbsp;10).Font.Size&nbsp;=&nbsp;24;//个性化设计。第1个字符开始,长度为10的字符,字体大小是24. MyTextRng.ParagraphFormat.Alignment&nbsp;=&nbsp;Microsoft.Office.Interop.PowerPoint.PpParagraphAlignment.ppAlignLeft;//文本对齐方式(水平方向) MySlide.Shapes[1].TextFrame.VerticalAnchor&nbsp;=&nbsp;MsoVerticalAnchor.msoAnchorMiddle;&nbsp;文本对齐方式(垂直方向) 心得:最重要的设置在Font属性中。其他设置,基本可以参考PPT中元素属性的设置方式来找到。比如我在写文本水平对齐方式时(左对齐,居中,右对齐),在PPT中,我们直接点击“段落”中的快捷键即可。所以我就找“段落”的英文,正好Alignment是对齐的意思,所以就找到了。 2.2&nbsp;图形(矩形) MySlide.Shapes.AddShape(MsoAutoShapeType.msoShapeRectangle,&nbsp;8.5F,&nbsp;6.5F,&nbsp;705F,&nbsp;525F); MySlide.Shapes[1].Line.ForeColor.RGB&nbsp;=&nbsp;A&nbsp;+&nbsp;B&nbsp;*&nbsp;256&nbsp;+&nbsp;C&nbsp;*&nbsp;256&nbsp;*&nbsp;256;//改变线条颜色 MySlide.Shapes[1].Fill.Transparency&nbsp;=&nbsp;1;//控制填充色为透明 MySlide.Shapes[1].Line.Style&nbsp;=&nbsp;MsoLineStyle.msoLineSingle;//改变线型里的复合类型 MySlide.Shapes[1].Line.Weight&nbsp;=&nbsp;1F;//改变线粗细 MySlide.Shapes[1].Shadow.Style&nbsp;=&nbsp;MsoShadowStyle.msoShadowStyleOuterShadow;//控制阴影类型 MySlide.Shapes[1].Shadow.ForeColor.RGB&nbsp;=&nbsp;0;//控制阴影颜色 MySlide.Shapes[1].Shadow.Transparency&nbsp;=&nbsp;0.6F;//控制透明度 MySlide.Shapes[1].Shadow.Size&nbsp;=&nbsp;100F;//控制大小 MySlide.Shapes[1].Shadow.Blur&nbsp;=&nbsp;4F;//控制虚化 MySlide.Shapes[1].Shadow.OffsetX&nbsp;=&nbsp;2.1F;//控制距离; MySlide.Shapes[1].Shadow.OffsetY&nbsp;=&nbsp;2.1F;//与offsetX共同决定角度 心得:基本的一些设置,通过英文就可以辨别。不过有些属性的设置是否与预期一致,需要等图形生成后再进一步确认。 2.3&nbsp;图片 MySlide.Shapes.AddPicture(&quot;文件路径&quot;,&nbsp;MsoTriState.msoFalse,&nbsp;MsoTriState.msoTrue,&nbsp;27F,&nbsp;24F,&nbsp;665F,&nbsp;333F); 2.4&nbsp;表格 Microsoft.Office.Interop.PowerPoint.Table&nbsp;MyTable&nbsp;=&nbsp;null; MyTable&nbsp;=&nbsp;MySlide.Shapes.AddTable(19,&nbsp;5,&nbsp;40F,&nbsp;100F,&nbsp;10F,&nbsp;10F).Table;//创建时规定的宽和高,不是表格最终的大小。 MyTable.Cell(k,&nbsp;j).Shape.TextFrame.TextRange.Font.Size&nbsp;=&nbsp;10; MyTable.Cell(k,&nbsp;j).Shape.TextFrame.TextRange.Font.Color.RGB&nbsp;=&nbsp;A&nbsp;+&nbsp;B&nbsp;*&nbsp;256&nbsp;+&nbsp;C&nbsp;*&nbsp;256&nbsp;*&nbsp;256; MyTable.Cell(k,&nbsp;j).Shape.TextFrame.TextRange.Font.NameAscii&nbsp;=&nbsp;&quot;Arial&quot;; MyTable.Cell(k,&nbsp;j).Shape.TextFrame.TextRange.Font.NameFarEast&nbsp;=&nbsp;&quot;微软雅黑&quot;; MyTable.Cell(k,&nbsp;j).Shape.TextFrame.TextRange.Font.Bold&nbsp;=&nbsp;MsoTriState.msoTrue; MyTable.Cell(k,&nbsp;j).Shape.TextFrame.TextRange.ParagraphFormat.Alignment&nbsp;=&nbsp;Microsoft.Office.Interop.PowerPoint.PpParagraphAlignment.ppAlignCenter; MyTable.Cell(k,&nbsp;j).Shape.TextFrame.VerticalAnchor&nbsp;=&nbsp;MsoVerticalAnchor.msoAnchorMiddle; MyTable.Cell(k,&nbsp;j).Shape.Fill.ForeColor.RGB&nbsp;=&nbsp;0; MyTable.Cell(k,&nbsp;j).Shape.TextFrame.TextRange.Text&nbsp;=&nbsp;&quot;C#生成PPT&quot;; 这里的设置,几乎和文本框的设置一样。只不过需要先选定Cell。一些个性化的设计,比如合并拆分单元格,边框颜色,按照一般的英文意思都能找到。 2.5&nbsp;图表 Microsoft.Office.Interop.PowerPoint.Chart&nbsp;MyChart&nbsp;=&nbsp;null;//图表 Microsoft.Office.Interop.PowerPoint.ChartData&nbsp;MyChartData&nbsp;=&nbsp;null;//图表的数据源 Microsoft.Office.Interop.PowerPoint.Axis&nbsp;MyYvalaxis&nbsp;=&nbsp;null;//图表的纵坐标 Microsoft.Office.Interop.PowerPoint.Axis&nbsp;MyXvalaxis&nbsp;=&nbsp;null;//图表的横坐标 Microsoft.Office.Interop.PowerPoint.DataLabels&nbsp;MyDataLabels&nbsp;=&nbsp;null;//图表的数据标签 Microsoft.Office.Interop.PowerPoint.Series&nbsp;MySeries&nbsp;=&nbsp;null;//数据系列 Microsoft.Office.Interop.PowerPoint.ChartGroups&nbsp;MyChartGroups&nbsp;=&nbsp;null;//数据系列-系列选项 Microsoft.Office.Interop.PowerPoint.Points&nbsp;MyPoints&nbsp;=&nbsp;null;&nbsp;//数据系列 MyChart&nbsp;=&nbsp;MySlide.Shapes.AddChart(Microsoft.Office.Core.XlChartType.xlColumnClustered,&nbsp;35F,&nbsp;205F,&nbsp;642F,&nbsp;227F).Chart;//添加柱形图 MyChartData&nbsp;=&nbsp;MyChart.ChartData;//实例化数据源 Microsoft.Office.Interop.Excel.Workbook&nbsp;MyDataWorkbook_2&nbsp;=&nbsp;(Microsoft.Office.Interop.Excel.Workbook)MyChartData.Workbook;//由于PPT的数据源是EXCEL工作表,所以此处还要调用EXCEL。 MyDataWorkbook_2.Application.WindowState&nbsp;=&nbsp;XlWindowState.xlMinimized;//不想看那么多窗口,所以最小化了。 Microsoft.Office.Interop.Excel.Worksheet&nbsp;MyDataWorksheet_2&nbsp;=&nbsp;(Microsoft.Office.Interop.Excel.Worksheet)MyDataWorkbook_2.Worksheets[1];//实例化工作表 Microsoft.Office.Interop.Excel.Range&nbsp;tRange_2&nbsp;=&nbsp;MyDataWorksheet_2.Cells.get_Range(&quot;A1&quot;,&nbsp;&quot;C10&quot;);//选定数据区域 Microsoft.Office.Interop.Excel.ListObject&nbsp;tbl1_2&nbsp;=&nbsp;MyDataWorksheet_2.ListObjects[1]; tbl1_2.Resize(tRange_2); //赋值&nbsp;&nbsp; ((Microsoft.Office.Interop.Excel.Range)(MyDataWorksheet_2.Cells.get_Range(&quot;A2&quot;))).FormulaR1C1&nbsp;=&nbsp;&quot;全国得分&quot;; ((Microsoft.Office.Interop.Excel.Range)(MyDataWorksheet_2.Cells.get_Range(&quot;A3&quot;))).FormulaR1C1&nbsp;=&nbsp;null; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //图表标题 MyChart.ChartTitle.Delete(); //纵轴 MyYvalaxis&nbsp;=&nbsp;(Microsoft.Office.Interop.PowerPoint.Axis)MyChart.Axes(Microsoft.Office.Interop.PowerPoint.XlAxisType.xlValue,&nbsp;Microsoft.Office.Interop.PowerPoint.XlAxisGroup.xlPrimary); MyYvalaxis.MajorGridlines.Delete();//删除主横网络线 MyYvalaxis.MajorUnit&nbsp;=&nbsp;0.5F; MyYvalaxis.MinimumScale&nbsp;=&nbsp;0.0F; MyYvalaxis.MaximumScale&nbsp;=&nbsp;1.5F; MyYvalaxis.Format.Line.ForeColor.RGB&nbsp;=&nbsp;A&nbsp;+&nbsp;B&nbsp;*&nbsp;256&nbsp;+&nbsp;C&nbsp;*&nbsp;256&nbsp;*&nbsp;256;&nbsp;;//坐标轴颜色 MyYvalaxis.Format.Line.Transparency&nbsp;=&nbsp;1F;//坐标轴是否透明;此句必须先指定颜色,否则无效&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MyYvalaxis.TickLabels.Delete();//删除坐标标签 //横轴 MyXvalaxis&nbsp;=&nbsp;(Microsoft.Office.Interop.PowerPoint.Axis)MyChart.Axes(Microsoft.Office.Interop.PowerPoint.XlAxisType.xlCategory,&nbsp;Microsoft.Office.Interop.PowerPoint.XlAxisGroup.xlPrimary); MyXvalaxis.MajorTickMark&nbsp;=&nbsp;Microsoft.Office.Interop.PowerPoint.XlTickMark.xlTickMarkOutside;//主要刻度线类型 MyXvalaxis.Format.Line.Weight&nbsp;=&nbsp;0.75F;//线型宽度 MyXvalaxis.Format.Line.ForeColor.RGB&nbsp;=&nbsp;A&nbsp;+&nbsp;B&nbsp;*&nbsp;256&nbsp;+&nbsp;C&nbsp;*&nbsp;256&nbsp;*&nbsp;256;//线条颜色 MyXvalaxis.TickLabelPosition&nbsp;=&nbsp;Microsoft.Office.Interop.PowerPoint.XlTickLabelPosition.xlTickLabelPositionNone; //图例 MyChart.Legend.Delete(); //数据标签格式和系列 //系列1 MySeries&nbsp;=&nbsp;(Microsoft.Office.Interop.PowerPoint.Series)MyChart.SeriesCollection(1); MySeries.HasDataLabels&nbsp;=&nbsp;true; MySeries.Format.Fill.ForeColor.RGB&nbsp;=&nbsp;A&nbsp;+&nbsp;B&nbsp;*&nbsp;256&nbsp;+&nbsp;C&nbsp;*&nbsp;256&nbsp;*&nbsp;256; MySeries.Format.Line.ForeColor.RGB&nbsp;=&nbsp;A&nbsp;+&nbsp;B&nbsp;*&nbsp;256&nbsp;+&nbsp;C&nbsp;*&nbsp;256&nbsp;*&nbsp;256; MySeries.Format.Line.Weight&nbsp;=&nbsp;1.5F; MySeries.Format.Shadow.Style&nbsp;=&nbsp;MsoShadowStyle.msoShadowStyleOuterShadow;//控制阴影类型 MySeries.Format.Shadow.ForeColor.RGB&nbsp;=&nbsp;0;//控制阴影颜色 MySeries.Format.Shadow.Transparency&nbsp;=&nbsp;0.6F;//控制透明度 MySeries.Format.Shadow.Size&nbsp;=&nbsp;100F;//控制大小 MySeries.Format.Shadow.Blur&nbsp;=&nbsp;4F;//控制虚化 MySeries.Format.Shadow.OffsetX&nbsp;=&nbsp;2.1F;//控制距离;&nbsp; MySeries.Format.Shadow.OffsetY&nbsp;=&nbsp;2.1F;//与offsetX共同决定角度 //柱子颜色 MyPoints&nbsp;=&nbsp;(Microsoft.Office.Interop.PowerPoint.Points)MySeries.Points(); MyPoints.Item(1).Format.Fill.ForeColor.RGB&nbsp;=&nbsp;A&nbsp;+&nbsp;B&nbsp;*&nbsp;256&nbsp;+&nbsp;B&nbsp;*&nbsp;256&nbsp;*&nbsp;256;//系列1中,第1个柱子的颜色 //柱子距离 MyChartGroups&nbsp;=&nbsp;(Microsoft.Office.Interop.PowerPoint.ChartGroups)MyChart.ChartGroups(); MyChartGroups.Item(1).GapWidth&nbsp;=&nbsp;50; //数据标签 MyDataLabels&nbsp;=&nbsp;(Microsoft.Office.Interop.PowerPoint.DataLabels)MySeries.DataLabels(); MyDataLabels.Position&nbsp;=&nbsp;Microsoft.Office.Interop.PowerPoint.XlDataLabelPosition.xlLabelPositionOutsideEnd; MyDataLabels.NumberFormat&nbsp;=&nbsp;&quot;0.0%&quot;; MyDataLabels.Format.TextFrame2.TextRange.Font.Size&nbsp;=&nbsp;9F; MyDataLabels.Format.TextFrame2.TextRange.Font.NameAscii&nbsp;=&nbsp;&quot;Calibri&quot;; MyDataLabels.Format.TextFrame2.TextRange.Font.Bold&nbsp;=&nbsp;MsoTriState.msoTrue; //系列2 MySeries&nbsp;=&nbsp;(Microsoft.Office.Interop.PowerPoint.Series)MyChart.SeriesCollection(2); MySeries.HasDataLabels&nbsp;=&nbsp;true; MySeries.Format.Fill.ForeColor.RGB&nbsp;=&nbsp;A&nbsp;+&nbsp;B&nbsp;*&nbsp;256&nbsp;+&nbsp;C&nbsp;*&nbsp;256&nbsp;*&nbsp;256; MySeries.Format.Line.ForeColor.RGB&nbsp;=&nbsp;A&nbsp;+&nbsp;B&nbsp;*&nbsp;256&nbsp;+&nbsp;C&nbsp;*&nbsp;256&nbsp;*&nbsp;256; MySeries.Format.Line.Weight&nbsp;=&nbsp;1.5F; MySeries.Format.Shadow.Style&nbsp;=&nbsp;MsoShadowStyle.msoShadowStyleOuterShadow;//控制阴影类型 MySeries.Format.Shadow.ForeColor.RGB&nbsp;=&nbsp;0;//控制阴影颜色 MySeries.Format.Shadow.Transparency&nbsp;=&nbsp;0.6F;//控制透明度 MySeries.Format.Shadow.Size&nbsp;=&nbsp;100F;//控制大小 MySeries.Format.Shadow.Blur&nbsp;=&nbsp;4F;//控制虚化 MySeries.Format.Shadow.OffsetX&nbsp;=&nbsp;2.1F;//控制距离 MySeries.Format.Shadow.OffsetY&nbsp;=&nbsp;2.1F;//与offsetX共同决定角度 //柱子距离 MyChartGroups&nbsp;=&nbsp;(Microsoft.Office.Interop.PowerPoint.ChartGroups)MyChart.ChartGroups(); MyChartGroups.Item(1).GapWidth&nbsp;=&nbsp;50; //数据标签 MyDataLabels&nbsp;=&nbsp;(Microsoft.Office.Interop.PowerPoint.DataLabels)MySeries.DataLabels(); MyDataLabels.Position&nbsp;=&nbsp;Microsoft.Office.Interop.PowerPoint.XlDataLabelPosition.xlLabelPositionOutsideEnd; MyDataLabels.NumberFormat&nbsp;=&nbsp;&quot;0.0%&quot;; MyDataLabels.Format.TextFrame2.TextRange.Font.Size&nbsp;=&nbsp;9F; MyDataLabels.Format.TextFrame2.TextRange.Font.NameAscii&nbsp;=&nbsp;&quot;Calibri&quot;; MyDataLabels.Format.TextFrame2.TextRange.Font.Italic&nbsp;=&nbsp;MsoTriState.msoTrue;</pre><p><br/></p>
2020/2/1 12:56:48(zgc) 抢沙发(0) 个人作品
阅读全文
执行时间 0.1165 秒(s), 12 个查询