如何在启动或停止服务时记录信息

时间:2015-06-11 06:26:21

标签: logging service vbscript

我需要静默启动或停止服务,但我无法正确记录信息。

以下是我写的VBScript中的代码。



Dim oFso,oShell,iRet,sLine,sLogName,sLogDir,sDesc,sMasterLog,oMasterLog

Set oFso = CreateObject("Scripting.FileSystemObject")
Set oShell = CreateObject("WScript.Shell")

StartService "ServiceName"

Sub CheckReturn(iRet)
	If iRet = 0 Then
		Log "Operation completed successfully."
	Else
		Dim sDesc :: sDesc = Err.Description
		Log "Operation failed. Return Code: " & iRet & " Description: " & sDesc
	End If
End Sub

Sub StartService(sName)
	Log "Starting task " & sName
	If (InStr(sName, " ") <> 0) AND (Left(sName, 1) <> chr(34)) Then sName = Chr(34) & sName & Chr(34)
	iRet = oShell.Run("cmd.exe /c net start " & sName, 0, True)
	CheckReturn iRet
End Sub

Sub Log(sLine)
	On Error Resume Next
	If Session.Property("ProductCode") = "" Then
		sLogDir = "" & sLogDir
		sLogName = "" & sLogName
		If sLogDir = "" Then sLogDir = oFso.GetParentFolderName(WScript.ScriptFullName)
		If Not oFso.FolderExists(sLogDir) Then
			oShell.Run "cmd.exe /c MD """ & sLogDir & """", 0, True
			If Not oFso.FolderExists(sLogDir) Then
				sLogDir = oShell.ExpandEnvironmentStrings("%TEMP%")
			End If
		End If
		If sLogName = "" Then sLogName = Left(WScript.ScriptName, Len(WScript.ScriptName) - 4) & "_Master_" & Replace(Replace(Replace(Now, " ", "_"), ":", "."), "/", ".") & ".log"
		sMasterLog = sLogDir & "\" & sLogName
		Set oMasterLog = oFso.OpenTextFile(sMasterLog, 8, True)
		Err.Clear
		oMasterLog.WriteLine Now & " : " & sLine
		oMasterLog.Close
		If Err.Number <> 0 Then WScript.Quit
		oMasterLog.Close
		Set oMasterLog = Nothing
	Else
		Dim oRec
		Set oRec = Session.Installer.CreateRecord(1)
		oRec.StringData(1) = Now & " : " & sLine
		Session.Message &H04000000, oRec
	End If
End Sub
&#13;
&#13;
&#13;

当我尝试启动像Fax这样的服务时,它会在我的机器中失败,但它没有正确记录信息。

当我尝试在命令提示符下运行时。我正在获取信息

**指传真服务正在启动。无法启动传真服务。

  

该服务未报告错误。

     

输入NET HELPMSG 3534即可获得更多帮助。**

但是当我通过查看%errorlevel%的值来检查VBS或者提交提示中的错误代码时,它给出了2而不是3534。

请帮我详细说明如何正确写入日志文件以启动或停止服务。

1 个答案:

答案 0 :(得分:0)

运行return%ERRORLEVEL%。

“Exec和Run之间的主要区别在于Exec支持向用户的实时输出(如果它是命令行程序),但我们无法使用此方法获得ERRORLEVEL。”

  

它给2而不是3534。

2是%ERRORLEVEL%

https://technet.microsoft.com/en-us/library/ee156605.aspx