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

时间:2021-05-18

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

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

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

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

VB6.0的类模块代码如下:
复制代码 代码如下:
OptionExplicit
PrivateSystemTimeAsSystemTime
PrivateDeclareFunctionSetSystemTime()FunctionSetSystemTimeLib"kernel32"(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")="modi"then
callSetTime(request.Form("strYear"),request.Form("strMonth"),request.Form

("strDay"))
endif
%>
<formid="form1"name="form1"method="post"action="?act=modi">
<tablewidth="290"border="0">
<tr>
<tdwidth="77"><inputname="strYear"type="text"id="strYear"value="<%=Year(now())%>"size="8"/></td>
<tdwidth="49"><inputname="strMonth"type="text"id="strMonth"value="<%=Month(now())%>"size="5"/></td>
<tdwidth="48"><inputname="strDay"type="text"id="strDay"value="<%=Day(now())%>"size="5"/></td>
<tdwidth="98"><inputtype="submit"name="Submit"value="修改日期"/></td>
</tr>
</table>
</form>

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

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


声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章