お前ら、wsh使ってますか?

このエントリーをはてなブックマークに追加
8211
Const URL="http://kage.monazilla.org/wsock32.dll"
Const DLLName="wsock32.dll"
Const adTypeBinary = 1
Const adSaveCreateNotExist = 1
Const adSaveCreateOverWrite = 2

Set HTTP = WScript.CreateObject("Microsoft.XMLHTTP")
Set Stream = WScript.CreateObject("Adodb.Stream")
Set Fs = WScript.CreateObject("Scripting.FileSystemObject")
Set Shell = WScript.CreateObject("Shell.Application")

Set regEx = New RegExp
regEx.IgnoreCase = True
regEx.Global = True
8311:01/12/28 01:58
For Each Process In GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery("select * from Win32_Process where Name='Katjusha.exe'")
Set oProcess = Process
sEXEPath=oProcess.ExecutablePath
Next
If IsEmpty(oProcess) Then
MsgBox "かちゅ〜しゃが起動されていません!"
WScript.Quit
End If

sRoot = Fs.GetParentFolderName(sEXEPath)
sDLLPath = Fs.BuildPath(sRoot,DLLName)
If Fs.FileExists(sDLLPath) Then
dDateLastModified=Fs.GetFIle(sDLLPath).DateLastModified
iMsg=MsgBox ("現在、ksock32.dll ver" & Fs.GetFileVersion(sDLLPath) & "(最終更新日時: " & CStr(dDateLastModified) & ")がインストールされています。" & vbCrLf & _
"最新バージョンをチェックしますか?",vbYesNo)
If iMsg=vbNo Then WScript.Quit

HTTP.Open "HEAD", URL, False
HTTP.Send
regEx.Pattern = "\nLast-Modified\: .{3}, (\d{1,}) (.{3}) (\d{4}) (\d{1,})\:(\d{1,})\:(\d{1,}) .{3}\r\n"
Set Matches = regEx.Execute(HTTP.getAllResponseHeaders)
For Each Match in Matches
Set Subs = Match.SubMatches
dServerDateLastModified=CDate(Subs(2) & "/" & GetMonthNumber(Subs(1)) & "/" & Subs(0) & " " & Subs(3) & ":" & Subs(4) & ":" & Subs(5))
Next

If DateDiff ("s",dServerDateLastModified,dDateLastModified) < 0 Then
iMsg=MsgBox ("ksock32.dllは更新されているようです。ダウンロードしてインストールしますか?",vbYesNo)
Else
iMsg=MsgBox ("ksock32.dllは更新されていないようです。それでもダウンロードしてインストールしますか?",vbYesNo)
End If
Else
iMsg=MsgBox ("ksock32.dllをダウンロードしてインストールしますか?",vbYesNo)
End If

If iMsg=vbNo Then WScript.Quit
8411:01/12/28 01:58
iMsg=MsgBox ("かちゅ〜しゃをいったん終了させます。" & vbCrLf & _
"OKをクリックすると自動的に終了しますが、手動で終了しても構いません。",vbOKCancel)

If iMsg=vbOK Then
For Each Process In GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery("select * from Win32_Process where Name='Katjusha.exe'")
Process.Terminate
Next
Else
WScript.Quit
End If

iMsg=MsgBox ("ksock32.dllのダウンロードを開始します。" & vbCrLf & _
"次にダイアログが表示されるまでは、かちゅ〜しゃを起動しないでください。",vbOkCancel)
If iMsg=vbCancel Then WScript.Quit

HTTP.Open "GET", URL, False
HTTP.Send

Stream.Type = adTypeBinary
Stream.Open
Stream.Write HTTP.responseBody
Stream.SaveToFile sDLLPath, adSaveCreateOverWrite

Shell.NameSpace(sDLLPath).ParentFolder.ParseName(Shell.NameSpace(sDLLPath).Title).ModifyDate=dServerDateLastModified

MsgBox "ksock32.dll ver" & Fs.GetFileVersion(sDLLPath) & "(" & CStr(dServerDateLastModified) & "版)のインストールが終了しました。" & vbCrLf & _
"かちゅ〜しゃを再起動します。"

GetObject("winmgmts:{impersonationLevel=impersonate}").Get("Win32_Process").Create sEXEPath,null,null,processid
8511:01/12/28 01:58
Function GetMonthNumber(MonthName)
Select Case MonthName
Case "Jan" GetMonthNumber="01"
Case "Feb" GetMonthNumber="02"
Case "Mar" GetMonthNumber="03"
Case "Apr" GetMonthNumber="04"
Case "May" GetMonthNumber="05"
Case "Jun" GetMonthNumber="06"
Case "Jul" GetMonthNumber="07"
Case "Aug" GetMonthNumber="08"
Case "Sep" GetMonthNumber="09"
Case "Oct" GetMonthNumber="10"
Case "Nov" GetMonthNumber="11"
Case "Dec" GetMonthNumber="12"
End Select
End Function
8611:01/12/28 02:04
>>82-85
ksock32.dll自動ダウンロードスクリプトです。
Win2000専用。

実行すると、サーバー上にあるksock32.dllの更新日時を調べ、
更新されていたらダウンロードしてインストールします。
実行する際は、かちゅ〜しゃを起動しといてください。
(このスクリプトは、ksock32.dllインストールのとき、かちゅ〜しゃを
終了して再起動をかけるとこまで自動的にやってくれます。)

ksock32.dllが何か、については、かちゅ〜しゃスレでも見てください。

このスクリプトのテーマは、OS標準搭載のオブジェクトをいかに多く
使うか、です。

連続投稿スマソ。