在GridControl控件中使用PopupContainerEdit构建数据快速输入检索

<p><a href="https://www.pianshen.com/" style="box-sizing: border-box; background: 0px 0px; color: rgb(255, 255, 255); text-decoration-line: none; line-height: 23px;"><span style="box-sizing: border-box; display: block;">程序员大本营</span><small>技术文章内容聚合第一站</small></a></p><p><br/></p><p><br/></p><p>&nbsp;</p><h2 style="box-sizing: border-box; font-family: inherit; font-weight: 500; line-height: 32px; color: inherit; margin-top: 20px; margin-bottom: 10px; font-size: 30px; word-break: break-all;"><span style="box-sizing: border-box;">在GridControl控件中使用PopupContainerEdit构建数据快速输入检索</span></h2><p>&nbsp;</p><p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify;">这几天一直被这个东西困扰,不过最终还是解决了,所以分享一下。</p><p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify;"><span style="box-sizing: border-box; font-weight: 700;">效果图如下:</span></p><p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify;"><img alt="" src="/ueditor/net/upload/image/20210414/6375401206655210937440893.gif"/></p><p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify;">&nbsp;这边我就说一个,就是药品名称的检索(看懂一个其它都大同小异)。</p><p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify;">第一步,你需要创建一个用户控件,这个控件就是你下拉时来显示数据的,如下图:</p><p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify;">我这里用户控件名为YpxxList</p><p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify;"><img alt="" src="/ueditor/net/upload/image/20210414/6375401207048960934642908.png"/></p><p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify;">第二步,需要在GridView中你需要实现下拉的列,ColumnEdit类型选PopupContainerEdit<span style="box-sizing: border-box; font-weight: 700;">(这是它的类型RepositoryItemPopupContainerEdit)</span></p><p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify;"><img alt="" src="/ueditor/net/upload/image/20210414/6375401207310484371344860.png"/></p><p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify;">这里重点,改好类型后这里会显示出来,要记得改一下TextEditStyle的类型,它默认是不让你在下拉框中输入东西,这样你就不能检索数据,这个问题我搞了好久....</p><p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify;"><img alt="" src="/ueditor/net/upload/image/20210414/6375401207672105466448230.png"/>&nbsp;</p><p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify;">&nbsp;</p><p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify;">第三步,需要在主窗体里声明几个对象,如下:</p><pre class="has" style="box-sizing: border-box; overflow: auto; font-family: Consolas, Inconsolata, Courier, monospace; padding: 8px; margin-top: 0px; margin-bottom: 24px; line-height: 22px; color: rgb(0, 0, 0); word-break: break-all; overflow-wrap: break-word; background-color: rgb(245, 245, 245); border: 1px solid rgb(204, 204, 204); border-radius: 4px; position: relative; white-space: pre-wrap;">private&nbsp;YpxxList&nbsp;ypxxList&nbsp;=&nbsp;null;&nbsp;&nbsp;&nbsp;//药品下拉列表(就是我刚才的用户控件对象)public&nbsp;delegate&nbsp;void&nbsp;UiHandleGrid(string&nbsp;text);//声明委托,需要跟用户控件进行传递数据,很重要public&nbsp;static&nbsp;event&nbsp;UiHandleGrid&nbsp;uihandleGrid;</pre><p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify;">然后在主窗体里开始编写代码,如下:&nbsp;</p><pre class="has" style="box-sizing: border-box; overflow: auto; font-family: Consolas, Inconsolata, Courier, monospace; padding: 8px; margin-top: 0px; margin-bottom: 24px; line-height: 22px; color: rgb(0, 0, 0); word-break: break-all; overflow-wrap: break-word; background-color: rgb(245, 245, 245); border: 1px solid rgb(204, 204, 204); border-radius: 4px; position: relative; white-space: pre-wrap;">//这个方法放到主窗体的Load里private&nbsp;void&nbsp;InitYpxx(){//这个是RepositoryItemPopupContainerEdit的子,这个控件应该是类似于Winform中的PanelPopupContainerControl&nbsp;pccYpxxList&nbsp;=&nbsp;new&nbsp;PopupContainerControl();//把PopupContainerControl给RepositoryItemPopupContainerEdit的弹出控件(PopupControl)PopupContainerEdit_Ypxx.PopupControl&nbsp;=&nbsp;pccYpxxList;//然后设置一下显示的宽高pccYpxxList.Width&nbsp;=&nbsp;300;pccYpxxList.Height&nbsp;=&nbsp;200;ypxxList&nbsp;=&nbsp;new&nbsp;YpxxList();ypxxList.Dock&nbsp;=&nbsp;DockStyle.Fill;//将用户控件添加到PopupContainerControl中pccYpxxList.Controls.Add(ypxxList);//这里是用户控件的一个委托,刚才说过了主窗体的委托,它们就是用来互相传递一些数据的,比如我在下拉框中选择一行数据,我需要把几列值赋给主窗体上对应的几列ypxxList.getGridDialog&nbsp;+=&nbsp;new&nbsp;YpxxList.GetGridDialog(YpxxList_getYpxxList);}//这个就是用户控件传递过来的一行选中的DataRow对象,我需要把一些值赋给主窗体的某些列private&nbsp;void&nbsp;YpxxList_getYpxxList(DataRow&nbsp;dr){gridView1.SetFocusedRowCellValue(&quot;ypmc&quot;,&nbsp;dr[&quot;itemname&quot;]);gridView1.SetFocusedRowCellValue(&quot;dosageUnit&quot;,&nbsp;dr[&quot;doseunit&quot;]);//popupContainerEdit.ClosePopup();}</pre><p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify;">第四步,就是给PopupContainerEdit添加两个事件,如下:</p><p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify;"><img alt="" src="/ueditor/net/upload/image/20210414/6375401207994664061737035.png"/></p><pre class="has" style="box-sizing: border-box; overflow: auto; font-family: Consolas, Inconsolata, Courier, monospace; padding: 8px; margin-top: 0px; margin-bottom: 24px; line-height: 22px; color: rgb(0, 0, 0); word-break: break-all; overflow-wrap: break-word; background-color: rgb(245, 245, 245); border: 1px solid rgb(204, 204, 204); border-radius: 4px; position: relative; white-space: pre-wrap;">private&nbsp;void&nbsp;PopupContainerEdit_Ypxx_KeyDown(object&nbsp;sender,&nbsp;KeyEventArgs&nbsp;e){if&nbsp;(e.KeyCode&nbsp;==&nbsp;Keys.Down){PopupContainerEdit_Ypxx.PopupControl.Controls[0].Focus();}}//这个方法就是输入值时,把输入的值传给用户控件,用户控件进行检索。private&nbsp;void&nbsp;PopupContainerEdit_Ypxx_EditValueChanging(object&nbsp;sender,&nbsp;DevExpress.XtraEditors.Controls.ChangingEventArgs&nbsp;e){popupContainerEdit&nbsp;=&nbsp;sender&nbsp;as&nbsp;PopupContainerEdit;string&nbsp;srm&nbsp;=&nbsp;popupContainerEdit.Text;if&nbsp;(srm.Trim()&nbsp;!=&nbsp;string.Empty){uihandleGrid(srm);popupContainerEdit.ShowPopup();popupContainerEdit.Focus();}else{popupContainerEdit.ClosePopup();}}</pre><p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify;">&nbsp;到这里主窗体的工作已完成,下面开始用户控件的代码编写,如下:‘</p><p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify;">第一步,也是声明几个对象下面要用到,代码如下:</p><pre class="has" style="box-sizing: border-box; overflow: auto; font-family: Consolas, Inconsolata, Courier, monospace; padding: 8px; margin-top: 0px; margin-bottom: 24px; line-height: 22px; color: rgb(0, 0, 0); word-break: break-all; overflow-wrap: break-word; background-color: rgb(245, 245, 245); border: 1px solid rgb(204, 204, 204); border-radius: 4px; position: relative; white-space: pre-wrap;">//放显示的数据private&nbsp;DataTable&nbsp;dt;//委托,把选中的行数据传递给主窗体public&nbsp;delegate&nbsp;void&nbsp;GetGridDialog(DataRow&nbsp;dr);public&nbsp;event&nbsp;GetGridDialog&nbsp;getGridDialog;</pre><p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify;">第二步,我就一次性把代码放出来了,偷个懒哈哈哈,如下:</p><pre class="has" style="box-sizing: border-box; overflow: auto; font-family: Consolas, Inconsolata, Courier, monospace; padding: 8px; margin-top: 0px; margin-bottom: 24px; line-height: 22px; color: rgb(0, 0, 0); word-break: break-all; overflow-wrap: break-word; background-color: rgb(245, 245, 245); border: 1px solid rgb(204, 204, 204); border-radius: 4px; position: relative; white-space: pre-wrap;">public&nbsp;YpxxList(){InitializeComponent();InitList();//主窗体的委托Qphzcyxxd.uihandleGrid&nbsp;+=&nbsp;new&nbsp;Qphzcyxxd.UiHandleGrid(frmYpxxAdvMain_uihandleGrid);}///&nbsp;&lt;summary&gt;///&nbsp;根据输入的text来检索数据///&nbsp;&lt;/summary&gt;///&nbsp;&lt;param&nbsp;name=&quot;text&quot;&gt;&lt;/param&gt;void&nbsp;frmYpxxAdvMain_uihandleGrid(string&nbsp;text){//第一句根据你的需求替换即可,下面的应该是通用的var&nbsp;drs&nbsp;=&nbsp;dt.Select(string.Format(&quot;itemname&nbsp;like&nbsp;&#39;%{0}%&#39;&nbsp;or&nbsp;inputcode&nbsp;like&nbsp;&#39;%{0}%&#39;&quot;,&nbsp;text));var&nbsp;table&nbsp;=&nbsp;dt.Clone();foreach&nbsp;(var&nbsp;dr&nbsp;in&nbsp;drs){var&nbsp;temp&nbsp;=&nbsp;table.NewRow();temp.ItemArray&nbsp;=&nbsp;dr.ItemArray;table.Rows.Add(temp);}gcYpxx.DataSource&nbsp;=&nbsp;table;gcYpxx.RefreshDataSource();}///&nbsp;&lt;summary&gt;///&nbsp;初始数据///&nbsp;&lt;/summary&gt;public&nbsp;void&nbsp;InitList(){//访问数据库得到你想要的数据源DataTalbe,然后给控件gcYpxx.DataSource&nbsp;=&nbsp;dt;}//GridView的双击事件private&nbsp;void&nbsp;gridView_DoubleClick(object&nbsp;sender,&nbsp;EventArgs&nbsp;e){if&nbsp;(gv_Ypxx.FocusedRowHandle&nbsp;&gt;&nbsp;-1){//得到选中行的数据传递给主窗体var&nbsp;dr&nbsp;=&nbsp;gv_Ypxx.GetFocusedDataRow();getGridDialog(dr);}}//鼠标按下的事件private&nbsp;void&nbsp;gridView_KeyDown(object&nbsp;sender,&nbsp;KeyEventArgs&nbsp;e){if&nbsp;(e.KeyCode&nbsp;==&nbsp;Keys.Enter&nbsp;&amp;&amp;&nbsp;gv_Ypxx.FocusedRowHandle&nbsp;&gt;&nbsp;-1){//得到选中行的数据传递给主窗体var&nbsp;dr&nbsp;=&nbsp;gv_Ypxx.GetFocusedDataRow();getGridDialog(dr);}}</pre><p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify;">这样就大功告成了!!!首次用有些地方还不太懂,鄙人愚钝,有错的地方请明示。</p><p style="box-sizing: border-box; outline: 0px; margin-top: 0px; margin-bottom: 16px; padding: 0px; color: rgb(196, 196, 200); overflow: auto hidden; overflow-wrap: break-word; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif, SimHei, SimSun; white-space: normal; background-color: rgb(38, 39, 40); line-height: 26px !important;"><span style="box-sizing: border-box; outline: 0px; margin: 0px; padding: 0px; overflow-wrap: break-word; color: rgb(243, 59, 69);"><span style="box-sizing: border-box; outline: 0px; font-weight: 700; overflow-wrap: break-word;">补充:最近发现代码有点问题,下面进行补充;</span></span></p><p style="box-sizing: border-box; outline: 0px; margin-top: 0px; margin-bottom: 16px; padding: 0px; color: rgb(196, 196, 200); overflow: auto hidden; overflow-wrap: break-word; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif, SimHei, SimSun; white-space: normal; background-color: rgb(38, 39, 40); line-height: 26px !important;"><img alt="" class="has" height="1048" src="/ueditor/net/upload/image/20210414/6375401244450425785507930" width="1200"/></p><p style="box-sizing: border-box; outline: 0px; margin-top: 0px; margin-bottom: 16px; padding: 0px; color: rgb(196, 196, 200); overflow: auto hidden; overflow-wrap: break-word; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif, SimHei, SimSun; white-space: normal; background-color: rgb(38, 39, 40); line-height: 26px !important;">需要把三个属性值改为“False”&nbsp;,我遇到的问题是在进行检索后选择某个值,会出现下面这种情况:</p><p style="box-sizing: border-box; outline: 0px; margin-top: 0px; margin-bottom: 16px; padding: 0px; color: rgb(196, 196, 200); overflow: auto hidden; overflow-wrap: break-word; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif, SimHei, SimSun; white-space: normal; background-color: rgb(38, 39, 40); line-height: 26px !important;"><img alt="" class="has" height="212" src="/ueditor/net/upload/image/20210414/6375401244472691407578390" width="360"/></p><p><span class="creativecommons" style="box-sizing: border-box;"><a href="https://creativecommons.org/licenses/by-sa/4.0/" style="box-sizing: border-box; background-image: initial; background-position: 0px 0px; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; color: rgb(66, 139, 202); text-decoration-line: none;"></a><span style="box-sizing: border-box;">版权声明:本文为博主原创文章,遵循<a href="https://creativecommons.org/licenses/by-sa/4.0/" target="_blank" style="box-sizing: border-box; background-image: initial; background-position: 0px 0px; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; color: rgb(66, 139, 202); text-decoration-line: none;">&nbsp;CC 4.0 BY-SA&nbsp;</a>版权协议,转载请附上原文出处链接和本声明。</span></span></p><p>本文链接:<a href="https://blog.csdn.net/MonkeyBananas/article/details/89713012" target="_blank" style="box-sizing: border-box; background-image: initial; background-position: 0px 0px; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; color: rgb(66, 139, 202); text-decoration-line: none;">https://blog.csdn.net/MonkeyBananas/article/details/89713012</a></p><p><br/></p><p><a href="https://www.pianshen.com/copyright.html#del" target="_blank" style="box-sizing: border-box; background-image: initial; background-position: 0px 0px; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; color: rgb(66, 139, 202); text-decoration-line: none;">原作者删帖</a>&nbsp;&nbsp;&nbsp;<a href="https://www.pianshen.com/copyright.html#others" target="_blank" style="box-sizing: border-box; background-image: initial; background-position: 0px 0px; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; color: rgb(66, 139, 202); text-decoration-line: none;">不实内容删帖</a>&nbsp;&nbsp;&nbsp;<a href="mailto:pianshen@gmx.com?subject=%E6%8A%95%E8%AF%89%E6%9C%AC%E6%96%87%E5%90%AB%E5%B9%BF%E5%91%8A%E6%88%96%E5%9E%83%E5%9C%BE%E4%BF%A1%E6%81%AF%EF%BC%88%E8%AF%B7%E9%99%84%E4%B8%8A%E8%BF%9D%E8%A7%84%E9%93%BE%E6%8E%A5%E5%9C%B0%E5%9D%80%EF%BC%89" title="投诉本文含广告或垃圾信息" style="box-sizing: border-box; background-image: initial; background-position: 0px 0px; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; color: rgb(66, 139, 202); text-decoration-line: none;">广告或垃圾文章投诉</a></p><hr/><h3 style="box-sizing: border-box; font-family: inherit; font-weight: 500; line-height: 1.1; color: inherit; margin-top: 20px; margin-bottom: 10px; font-size: 24px;"><br/></h3><p><br/></p>
2021/4/14 15:47:37(zgc) 抢沙发(0) Net技术
阅读全文

RAD Studio 10.4.2 绿色版

<p><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">一、绿色版介绍</span><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">绿色版为完全版,没做任何的精简,也没有做任何的改动!</span><br/><span style="color:#DC143C">绿色版不含任何破解,仅供研究,24小时后请自行删除,如需继续使用RAD&nbsp;Studio,请购买正版。</span><br/><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">二、绿色版文件包说明</span><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">绿色版共包含4个文件包,分别为:</span><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">dotnetfx45_full_x86_x64.exe:Microsoft&nbsp;.NET&nbsp;Framework&nbsp;4.5,必选</span><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">RAD&nbsp;Studio&nbsp;10.4.2&nbsp;绿色版.7z:基础包,必选</span><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">RAD&nbsp;Studio&nbsp;10.4.2&nbsp;PlatformSDKs.7z:Android&nbsp;SDK、Android&nbsp;NDK,可选</span><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">RAD&nbsp;Studio&nbsp;10.4&nbsp;Green&nbsp;1.4.rar:绿化程序,必选</span><br/><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">三、绿色版使用说明</span><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">1.安装Microsoft&nbsp;.NET&nbsp;Framework&nbsp;4.5,只安装一次即可,Windows&nbsp;10已自带,可以跳过此步</span><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">2.解压RAD&nbsp;Studio&nbsp;10.4.2&nbsp;绿色版.7z到任意目录</span><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">3.解压RAD&nbsp;Studio&nbsp;10.4.2&nbsp;PlatformSDKs.7z解压到绿色版的Extra目录(10.4\Extra\CatalogRepository\)</span><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">4.解压RAD&nbsp;Studio&nbsp;10.4&nbsp;Green&nbsp;1.4.rar解压到绿色版目录下(10.4\RADStudioSydneyGreen.exe)</span><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">5.运行RADStudioSydneyGreen.exe可实现绿化和卸载</span><br/><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">四、下载地址</span><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">Microsoft&nbsp;.NET&nbsp;Framework&nbsp;4.5&nbsp;官方下载地址:</span><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">&nbsp;下载地址:</span><img src="/ueditor/net/upload/image/20210228/6375013931970307824735760.gif"/><a target="_blank" href="http://download.microsoft.com/download/b/a/4/ba4a7e71-2906-4b2d-a0e1-80cf16844f5f/dotnetfx45_full_x86_x64.exe" style="text-decoration-line: none; color: rgb(51, 51, 51); font-family: 宋体; font-size: 12px; white-space: normal; background-color: rgb(255, 255, 255);">http://download.microsoft.com/download/b/a/4/ba4a7e71-2906-4b2d-a0e1-80cf16844f5f/dotnetfx45_full_x86_x64.exe</a><br/><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">&nbsp;RAD&nbsp;Studio&nbsp;10.4.2&nbsp;绿色版.7z(3.69GB,解压后26.2GB)</span><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">下载地址:https://pan.baidu.com/s/1xmMoFKEt--Kud7_6lB7Dgg</span><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">提取码:je3q</span><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">&nbsp;MD5:&nbsp;7C078BC1C78DE33A70F76D98A193E8F6</span><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">&nbsp;SHA1:&nbsp;37F43F18E57FA6B5C8245169C2D024A26B047998</span><br/><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">&nbsp;RAD&nbsp;Studio&nbsp;10.4.2&nbsp;PlatformSDKs.7z(2.31GB,解压后5.91GB)</span><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">下载地址:https://pan.baidu.com/s/1TdS9B2t4ymcwrRQwqZKBiw</span><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">提取码:40w3</span><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">&nbsp;MD5:&nbsp;34DD02D1EDE2BF62580C76F424E72C2F</span><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">&nbsp;SHA1:&nbsp;ED3C5D4E35DAB4E8B8ED07582317A042734719E2</span><br/><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">&nbsp;RAD&nbsp;Studio&nbsp;10.4&nbsp;Green&nbsp;1.4.rar(965KB)</span><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">下载地址:https://pan.baidu.com/s/1_YYv2QiQRJRXolH1u80bsg</span><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">提取码:0tod</span><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">&nbsp;MD5:&nbsp;837FF4733D85FF4F7C77B803804AEC32</span><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">&nbsp;SHA1:&nbsp;5F81CFE8BB39A4F983A63C64050ACCAFE86193AF</span><br/><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">&nbsp;RAD&nbsp;Studio&nbsp;10.4&nbsp;Green&nbsp;Update&nbsp;History</span><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">&nbsp;-1.4</span><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">&nbsp;&nbsp;&nbsp;&nbsp;支持RAD&nbsp;Studio&nbsp;10.4.2</span><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">&nbsp;-1.3</span><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">&nbsp;&nbsp;&nbsp;&nbsp;支持RAD&nbsp;Studio&nbsp;10.4.1</span><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">&nbsp;-1.2</span><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">&nbsp;&nbsp;&nbsp;&nbsp;修正部分环境变量路径错误</span><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">-1.1</span><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">&nbsp;&nbsp;&nbsp;&nbsp;修正关联文件路径错误</span><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">&nbsp;&nbsp;&nbsp;&nbsp;修正帮助文件路径错误</span><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">&nbsp;&nbsp;&nbsp;&nbsp;修正卸载会连同10.3一起卸载的错误</span><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">-1.0</span><br/><span style="font-family: 宋体; font-size: 12px; background-color: rgb(255, 255, 255);">&nbsp;&nbsp;&nbsp;&nbsp;RAD&nbsp;Studio&nbsp;10.4&nbsp;绿化程序第一版</span></p><p><span style="color: rgb(0, 0, 0); font-family: 宋体; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;">https://cloud.189.cn/t/RjmmEnZJfqqa&nbsp;(访问码:9g8i)&nbsp;天翼云盘</span></p><p>转自:<a></a>http://bbs.2ccc.com/topic.asp?topicid=605673<a></a></p>
2021/2/27 21:26:32(zgc) 抢沙发(0) 个人作品
阅读全文

Page.ClientScript.RegisterStartupScript不执行问题【转】

<p style="margin: 10px auto; color: rgb(0, 0, 102); font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 13px; white-space: normal; background-color: rgb(255, 255, 255);">c#后台使用Page.ClientScript.RegisterStartupScript在前台注册一段脚本提示,发现没有效果,寻寻觅觅,终于从度娘处找到了原因:</p><p style="margin: 10px auto; color: rgb(0, 0, 102); font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 13px; white-space: normal; background-color: rgb(255, 255, 255);">该页面多次使用到了Page.ClientScript.RegisterStartupScript(Type type, string key, string script)</p><p style="margin: 10px auto; color: rgb(0, 0, 102); font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 13px; white-space: normal; background-color: rgb(255, 255, 255);">问题就出在了参数key上,同一页面会按顺序执行Page.ClientScript.RegisterStartupScript(Type type, string key, string script),如果key都为空或为相同的值,则会只执行第一个脚本,所以后面的就失效了。</p><pre class="brush:c#;toolbar:false">Page.ClientScript.RegisterStartupScript(this.GetType(),&nbsp;&quot;alertsuccess&quot;,&nbsp;&quot;&lt;script&nbsp;language=&#39;javascript&#39;&gt;SendSuccess();&lt;/script&gt;&quot;);</pre><pre class="brush:c#;toolbar:false">&nbsp;&nbsp;///&nbsp;&lt;summary&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;显示消息提示对话框 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;/summary&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;param&nbsp;name=&quot;page&quot;&gt;当前页面指针,一般为this&lt;/param&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;param&nbsp;name=&quot;msg&quot;&gt;提示信息&lt;/param&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;Show(System.Web.UI.Page&nbsp;page,&nbsp;string&nbsp;msg) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//由于可能频繁调用,增加随机因子&nbsp;2020-12-17 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Random&nbsp;rnd&nbsp;=&nbsp;new&nbsp;Random(1200); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;page.ClientScript.RegisterStartupScript(page.GetType(),&nbsp;&quot;message&quot;&nbsp;+&nbsp;rnd.Next().ToString()&nbsp;+&nbsp;rnd.Next().ToString(),&nbsp;&quot;&lt;script&nbsp;language=&#39;javascript&#39;&nbsp;defer&gt;alert(&#39;&quot;&nbsp;+&nbsp;msg.ToString()&nbsp;+&nbsp;&quot;&#39;);&lt;/script&gt;&quot;); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</pre><p>转自:<a href="https://www.cnblogs.com/wufeng123/p/4459542.html">https://www.cnblogs.com/wufeng123/p/4459542.html</a> </p><p><br/></p>
2020/12/17 17:31:03(zgc) 抢沙发(0) 个人作品
阅读全文

【转】bootstrap输入验证

<p style="margin: 10px auto; padding: 0px; line-height: 1.5; font-size: 13px; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);">下载并复制bootstrap验证css以及js到项目</p><p style="margin: 10px auto; padding: 0px; line-height: 1.5; font-size: 13px; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);">创建自己的验证myValidater.js:</p><pre class="brush:js;toolbar:false">function&nbsp;validate(form)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;validateObj&nbsp;=&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message:&nbsp;&#39;This&nbsp;value&nbsp;is&nbsp;not&nbsp;valid&#39;, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;feedbackIcons:&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;valid:&nbsp;&#39;glyphicon&nbsp;glyphicon-ok&#39;, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;invalid:&nbsp;&#39;glyphicon&nbsp;glyphicon-remove&#39;, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;validating:&nbsp;&#39;glyphicon&nbsp;glyphicon-refresh&#39; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;fields:&nbsp;{} &nbsp;&nbsp;&nbsp;&nbsp;}; &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;(数组,&nbsp;&nbsp;方法(下标,对象){}); &nbsp;&nbsp;&nbsp;&nbsp;$.each(form.find(&quot;input&quot;),&nbsp;function&nbsp;(i,&nbsp;item)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;fields:{&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;userName:&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message:&nbsp;&#39;用户名验证失败&#39;,&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;validators:&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;notEmpty:&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message:&nbsp;&#39;用户名不能为空&#39; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;obj&nbsp;=&nbsp;{};&nbsp;//存放验证规则 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj.message&nbsp;=&nbsp;$(item).attr(&quot;name&quot;)&nbsp;+&nbsp;&quot;必须填写&quot;; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;validators&nbsp;=&nbsp;{&nbsp;}; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(typeof&nbsp;($(item).attr(&quot;myValidate&quot;))&nbsp;==&nbsp;&quot;undefined&quot;)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;xiaoXi=$(item).parents(&quot;div.form-group&quot;).find(&quot;label&quot;).text(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//非空验证 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;($(item).attr(&quot;myValidate&quot;).indexOf(&quot;notEmpty&quot;)&nbsp;!=&nbsp;-1)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;validators.notEmpty&nbsp;=&nbsp;{&nbsp;message:&nbsp;xiaoXi+&quot;不能为空&quot;&nbsp;}; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//数字 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;($(item).attr(&quot;myValidate&quot;).indexOf(&quot;numeric&quot;)&nbsp;!=&nbsp;-1)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;validators.numeric&nbsp;=&nbsp;{&nbsp;message:xiaoXi+&quot;必须是数字&quot;&nbsp;}; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;&nbsp;长度 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stringLength:&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;min:&nbsp;6, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;max:&nbsp;18, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message:&nbsp;&#39;用户名长度必须在6到18位之间&#39; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;($(item).attr(&quot;myValidate&quot;).indexOf(&quot;stringLength&quot;)&nbsp;!=&nbsp;-1)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;str&nbsp;=&nbsp;$(item).attr(&quot;myValidate&quot;); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//2,10 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;val&nbsp;=&nbsp;str.substring(str.indexOf(&quot;(&quot;,&nbsp;str.indexOf(&quot;stringLength&quot;))&nbsp;+&nbsp;1,&nbsp;str.indexOf(&quot;)&quot;,&nbsp;str.indexOf(&quot;stringLength&quot;))); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;stringLen&nbsp;=&nbsp;{}; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stringLen[&quot;min&quot;]&nbsp;=&nbsp;val.split(&quot;,&quot;)[0]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stringLen[&quot;max&quot;]&nbsp;=&nbsp;val.split(&quot;,&quot;)[1]; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stringLen.message&nbsp;=xiaoXi&nbsp;+&nbsp;&quot;长度必须为&quot;&nbsp;+&nbsp;val.split(&quot;,&quot;)[0]&nbsp;+&nbsp;&quot;到&quot;&nbsp;+&nbsp;val.split(&quot;,&quot;)[1]&nbsp;+&nbsp;&quot;之间&quot;; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;validators.stringLength&nbsp;=&nbsp;stringLen; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//长度必须几位 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;($(item).attr(&quot;myValidate&quot;).indexOf(&quot;size&quot;)&nbsp;!=&nbsp;-1)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;str&nbsp;=&nbsp;$(item).attr(&quot;myValidate&quot;); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//2,10 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;val&nbsp;=&nbsp;str.substring(str.indexOf(&quot;(&quot;,&nbsp;str.indexOf(&quot;size&quot;))&nbsp;+&nbsp;1,&nbsp;str.indexOf(&quot;)&quot;,&nbsp;str.indexOf(&quot;size&quot;))); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;stringLen&nbsp;=&nbsp;{}; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stringLen[&quot;min&quot;]&nbsp;=&nbsp;val; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stringLen[&quot;max&quot;]&nbsp;=&nbsp;val; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stringLen.message&nbsp;=xiaoXi&nbsp;+&nbsp;&quot;长度必须为&quot;&nbsp;+&nbsp;val+&nbsp;&quot;位&quot;; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;validators.stringLength&nbsp;=&nbsp;stringLen; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;regexp:&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;regexp:&nbsp;/^[a-zA-Z0-9_]+$/, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message:&nbsp;&#39;用户名只能包含大写、小写、数字和下划线&#39; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;($(item).attr(&quot;myValidate&quot;).indexOf(&quot;nameregexp&quot;)&nbsp;!=&nbsp;-1)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;reg&nbsp;=&nbsp;{}; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reg.regexp&nbsp;=&nbsp;/^[a-zA-Z0-9_\.]+$/; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reg.message&nbsp;=xiaoXi+&quot;必须为数字或者下划线,不能为特殊字符&quot;; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;validators.regexp&nbsp;=&nbsp;reg; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;邮箱 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;emailAddress:&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message:&nbsp;&#39;邮箱地址格式有误&#39; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;($(item).attr(&quot;myValidate&quot;).indexOf(&quot;email&quot;)&nbsp;!=&nbsp;-1)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;validators.emailAddress&nbsp;=&nbsp;{&nbsp;message:&nbsp;&quot;电子邮箱地址不正确&quot;&nbsp;}; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//网址 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;($(item).attr(&quot;myValidate&quot;).indexOf(&quot;uri&quot;)&nbsp;!=&nbsp;-1)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;validators.uri&nbsp;=&nbsp;{&nbsp;allowLocal:&nbsp;&quot;true&quot;,&nbsp;message:&nbsp;&quot;Uri地址格式不正确&quot;&nbsp;}; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//两次输入的密码不一致 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;identical:&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;field:&nbsp;&#39;password&#39;,&nbsp;//需要进行比较的input&nbsp;name值 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message:&nbsp;&#39;两次密码不一致&#39; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;($(item).attr(&quot;myValidate&quot;).indexOf(&quot;identical&quot;)&nbsp;!=&nbsp;-1)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;str&nbsp;=&nbsp;$(item).attr(&quot;myValidate&quot;); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;val&nbsp;=&nbsp;str.substring(str.indexOf(&quot;(&quot;,&nbsp;str.indexOf(&quot;identical&quot;))&nbsp;+&nbsp;1,&nbsp;str.indexOf(&quot;)&quot;,&nbsp;str.indexOf(&quot;identical&quot;))); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;validators.identical&nbsp;=&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;field:&nbsp;val, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message:&nbsp;&#39;密码和重复密码不一致&#39; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;年龄 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;($(item).attr(&quot;myValidate&quot;).indexOf(&quot;ages&quot;)&nbsp;!=&nbsp;-1)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;val&nbsp;=&nbsp;str.substring(str.indexOf(&quot;(&quot;,&nbsp;str.indexOf(&quot;ages&quot;))&nbsp;+&nbsp;1,&nbsp;str.indexOf(&quot;)&quot;,&nbsp;str.indexOf(&quot;ages&quot;))); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;stringLen&nbsp;=&nbsp;{}; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stringLen[&quot;min&quot;]&nbsp;=&nbsp;val.split(&quot;,&quot;)[0]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stringLen[&quot;max&quot;]&nbsp;=&nbsp;val.split(&quot;,&quot;)[1]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;age&nbsp;=&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lessThan:&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value:&nbsp;stringLen[1], &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inclusive:&nbsp;true, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message:&nbsp;&#39;年龄最高&#39;+stringLen[1] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;greaterThan:&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value:&nbsp;stringLen[0], &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inclusive:&nbsp;false, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message:&nbsp;&#39;年龄最小&#39;+stringLen[0] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;validators.ages&nbsp;=&nbsp;age; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//remote&nbsp;ajax验证,验证是否存在 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;remote:&nbsp;{//ajax验证。server&nbsp;result:{&quot;valid&quot;,true&nbsp;or&nbsp;false}&nbsp;向服务发送当前input&nbsp;name值,获得一个json数据。例表示正确:{&quot;valid&quot;,true}&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url:&nbsp;&#39;exist2.do&#39;,//验证地址 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message:&nbsp;&#39;用户已存在&#39;,//提示消息 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type:&nbsp;&#39;POST&#39;//请求方式 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/**自定义提交数据,默认值提交当前input&nbsp;value &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;data:&nbsp;function(validator)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;password:&nbsp;$(&#39;[name=&quot;passwordNameAttributeInYourForm&quot;]&#39;).val(), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;whatever:&nbsp;$(&#39;[name=&quot;whateverNameAttributeInYourForm&quot;]&#39;).val() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;remote(地址.action,&nbsp;input=id=主键的值)&nbsp;&nbsp;&nbsp;新增:员工登录名.action?empNo=0&amp;empName=姓名 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;($(item).attr(&quot;myValidate&quot;).indexOf(&quot;remote&quot;)&nbsp;!=&nbsp;-1)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;str&nbsp;=&nbsp;$(item).attr(&quot;myValidate&quot;); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;val&nbsp;=&nbsp;str.substring(str.indexOf(&quot;(&quot;,&nbsp;str.indexOf(&quot;remote&quot;))&nbsp;+&nbsp;1,&nbsp;str.indexOf(&quot;)&quot;,&nbsp;str.indexOf(&quot;remote&quot;))); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;arr=val.split(&quot;,&quot;); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//向远程服务器发送的值 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;cust_data={}; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//主键如果有就取值,如果没有就为0 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cust_data[arr[1]]=$(&quot;#&quot;+arr[1]).val()&nbsp;||&nbsp;0; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//name=&quot;empName&quot; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cust_data[$(item).attr(&quot;name&quot;)]=$(item).val(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;validators.remote&nbsp;=&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type:&#39;POST&#39;, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url:&nbsp;arr[0], &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data:cust_data, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message:&nbsp;xiaoXi+&#39;已经存在!&#39; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj.validators&nbsp;=&nbsp;validators; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;validateObj.fields[$(item).attr(&quot;name&quot;)]&nbsp;=&nbsp;obj; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;}) &nbsp;&nbsp;&nbsp;&nbsp;form.bootstrapValidator(validateObj); }</pre><p><span style="font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 13px; background-color: rgb(255, 255, 255);">在页面中导入验证的css和js:</span></p><pre class="brush:html;toolbar:false">&lt;!--&nbsp;bootstrapvalidator的css&nbsp;--&gt; &nbsp;&nbsp;&lt;link&nbsp;href=&quot;${pageContext.request.contextPath&nbsp;}/static/plugins/bootstrapvalidator/bootstrapValidator.min.css&quot;&nbsp;rel=&quot;stylesheet&quot;&gt;&lt;!--&nbsp;bootstrapvalidator的js&nbsp;--&gt; &nbsp;&nbsp;&nbsp;&nbsp;&lt;script&nbsp;src=&quot;${pageContext.request.contextPath&nbsp;}/static/plugins/bootstrapvalidator/bootstrapValidator.min.js&quot;&gt;&lt;/script&gt; &nbsp;&nbsp;&nbsp;&nbsp;&lt;script&nbsp;src=&quot;${pageContext.request.contextPath&nbsp;}/static/plugins/bootstrapvalidator/language/zh_CN.js&quot;&gt;&lt;/script&gt; &nbsp;&nbsp;&nbsp;&nbsp;&lt;script&nbsp;src=&quot;${pageContext.request.contextPath&nbsp;}/static/plugins/bootstrapvalidator/myValidater.js&quot;&gt;&lt;/script&gt;</pre><p><span style="font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 13px; background-color: rgb(255, 255, 255);"></span><span style="font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 13px; background-color: rgb(255, 255, 255);">在input标签中:</span></p><pre class="brush:html;toolbar:false">&lt;input&nbsp;type=&quot;text&quot;&nbsp;id=&quot;startTime&quot;&nbsp;name=&quot;startTime&quot;&nbsp;&nbsp;myValidater=&quot;notEmpty&quot;&nbsp;&nbsp;&nbsp;class=&quot;form-control&nbsp;form_datetime&quot;&nbsp;placeholder=&quot;请选择日期&quot;&nbsp;/&gt;</pre><p><span style="font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 13px; background-color: rgb(255, 255, 255);">在javascript中:</span><span style="font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 13px; background-color: rgb(255, 255, 255);"></span><br/></p><pre class="brush:js;toolbar:false">&nbsp;&lt;script&nbsp;type=&quot;text/javascript&quot;&gt; &nbsp;&nbsp;&nbsp;&nbsp;$(function(){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//bootstrapvalidator验证 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;validate(&nbsp;$(&quot;form&quot;)&nbsp;); &nbsp;&nbsp;&nbsp;&nbsp;});</pre><p>转自:https://www.cnblogs.com/by-1642146903/articles/7143596.html<span style="font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 13px; background-color: rgb(255, 255, 255);"></span><br/></p>
2020/12/4 14:26:09(zgc) 抢沙发(1) 个人作品
阅读全文

【转】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) 抢沙发(0) 个人作品
阅读全文

[转,下载]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) 抢沙发(396) 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) 个人作品
阅读全文
系统公告

<p>近日服务器切换,将暂时造成.com域名无法访问,.cc域名能够正常访问!预计能正常访问时间在中秋节期间。</p>

搜索
站点数据
栏目总数: 7 个
页面数量: 52 篇
评论数量: 539 条
标签数量: 5 个
合作伙伴: 11 位
附件数量: 53 个
执行时间 0.0887 秒(s), 11 个查询