用ASP+DLL实现WEB方式修改服务器时间

2018-09-06 12:47

阅读:507

  昨天一个朋友有个需求,是要通过WEB方式,修改IIS服务器上的时间,由于他的系统是ASP3.0下开发的,所以本例子的代码是ASP的,不是但是本人写这个文章是想抛砖引玉,毕竟编写程序关键的不是语言,更重要的是一种思想,把程序语言理解为一种工具,把编程思想理解为解决问题的思路和方法,那么编写出来的程序就是:利用“工具”按照解决问题的“思想”去解决一个问题。

首先,要感谢网友“小虎”,我是在网上看了他写的一篇关于用VB6.0编写DLL组件FORASP的文章改写的,他的DLL代码只实现了改写小时和分钟,我增加了年、月、日、秒的修改。

首先,在VB6.0中建立一个ActiveXDll工程项目,信息如下:

工程名称:systimeset
类模块名称:timeset

VB6.0的类模块代码如下:
复制代码 代码如下:
OptionExplicit
PrivateSystemTimeAsSystemTime
PrivateDeclareFunctionSetSystemTime()FunctionSetSystemTimeLibkernel32(lpSystemTimeAsSystemTime)AsLong
PrivateTypeSystemTime
wYearAsInteger
wMonthAsInteger
wDayOfWeekAsInteger
wDayAsInteger
wHourAsInteger
wMinuteAsInteger
wSecondAsInteger
wMillisecondsAsInteger
EndType

Dimtmp

Privatem_HourAsInteger
Privatem_MinuteAsInteger
Privatem_YearAsInteger
Privatem_MonthAsInteger
Privatem_DayAsInteger
Privatem_SecondAsInteger

由李锡远修改修改日期:2006-08-31修改项目:增加对年、月、日、秒的操作
--------------------

PublicPropertyGet()PropertyGetYear()AsInteger
Year=m_Year
EndProperty
PublicPropertyLet()PropertyLetYear(tmp_YearAsInteger)
m_Year=tmp_Year
EndProperty
--------------------

PublicPropertyGet()PropertyGetMonth()AsInteger
Month=m_Month
EndProperty
PublicPropertyLet()PropertyLetMonth(tmp_MonthAsInteger)
m_Month=tmp_Month
EndProperty
--------------------

PublicPropertyGet()PropertyGetDay()AsInteger
Day=m_Day
EndProperty
PublicPropertyLet()PropertyLetDay(tmp_DayAsInteger)
m_Day=tmp_Day
EndProperty
--------------------

PublicPropertyGet()PropertyGetSecond()AsInteger
Second=m_Second
EndProperty
PublicPropertyLet()PropertyLetSecond(tmp_SecondAsInteger)
m_Second=tmp_Second
EndProperty



PublicPropertyGet()PropertyGetHour()AsInteger
Hour=m_Hour
EndProperty
PublicPropertyLet()PropertyLetHour(tmp_HourAsInteger)
m_Hour=tmp_Hour
EndProperty
PublicPropertyGet()PropertyGetMinute()AsInteger
Minute=m_Minute
EndProperty
PublicPropertyLet()PropertyLetMinute(tmp_MinuteAsInteger)
m_Minute=tmp_Minute
EndProperty

PublicFunctionsetup()Functionsetup()AsInteger
SystemTime.wDay=Day
SystemTime.wDayOfWeek=1
SystemTime.wMilliseconds=0
SystemTime.wMonth=Month
SystemTime.wSecond=Second
SystemTime.wYear=Year
SystemTime.wHour=Hour
SystemTime.wMinute=Minute
setup=SetSystemTime(SystemTime)
EndFunction

将其编译为systimeset.dll的文件。

关于DLL的注册,通常VB在本机上编译后,会自动将DLL注册;但如果你要放到IIS服务器上,请使用如下方法:
1、将systimeset.dll拷贝到c:\WINDOWS\system32下;
2、在开始菜单的运行里面输入:regsvr32systimeset.dll(敲回车啊)
3、因为修改服务器的时间,INTERNET来宾帐户不具有该权限,设立权限请打开控制面版中的“管理工具”,然后打开“本地安全策略”--“用户权力指派”,双击“更改系统时间”,在弹出的对话框中点“添加用户或组”,将INETNET来宾帐户加入进来。
4、一切完毕后,将IIS服务重新启动一次。


在上面的设置完毕后,使用systimeset.dll组件的ASP代码页面如下:

复制代码 代码如下:
<%@language=vbscript%>
<%
functionSetTime(strYear,strMonth,strDay)
response.Expires=0
setobj=server.createobject(systimeset.timeset)
obj.Year=strYear
obj.Month=strMonth
obj.Day=strDay
ifHour(now())-8>0then
obj.Hour=Hour(now())-8
else
obj.Hour=8
endif
obj.Minute=Minute(now())
obj.Second=Second(now())
obj.setup

setobj=Nothing
endfunction

ifrequest(act)=modithen
callSetTime(request.Form(strYear),request.Form(strMonth),request.Form

(strDay))
endif
%>
<formid=form1name=form1method=postaction=?act=modi>
<tablewidth=290border=0>
<tr>
<tdwidth=77><inputname=strYeartype=textid=strYearvalue=<%=Year(now())%>size=8/></td>
<tdwidth=49><inputname=strMonthtype=textid=strMonthvalue=<%=Month(now())%>size=5/></td>
<tdwidth=48><inputname=strDaytype=textid=strDayvalue=<%=Day(now())%>size=5/></td>
<tdwidth=98><inputtype=submitname=Submitvalue=修改日期/></td>
</tr>
</table>
</form>

以上是所有实现的代码,有问题可以加我QQ:17020415

将上面的ASP代码页面粘贴到一个空的ASP文件中,然后在IIS中将站点设置好就可以了。(设置IIS虚拟目录也可以的。)



评论


亲,登录后才可以留言!