このログのスクリプトは以後のログで更新しました。[ 20090411 1839 ]
鯖ってより、Windows(NT系2k以降)端末全般に云えるコトかも知らんが、
Windows起動時のアプリケーション自動起動・・・
[スタート]メニュー、[プログラム]配下の[スタートアップ]に登録したり、
レジストリの
[HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Run]
|
に登録したりと、やり方は様々だろう。
ただ、残念なことに、これらでは起動順序を指定できない。
唯一その機能を持つレジストリキー RunOnce も、既知と思うが、
システムレベルのファイル更新向けなので、初回起動時にのみ動作し、設定が消去される。
スタートアップ起動させたいが、起動タイミングがカブると具合の悪いものも、意外に少なくはナイようだ。
しかも、スタートアップフォルダ登録では、ログオン時にしか機能しない。
ココで 紛らわしいので一応の解説を入れると、[スタートアップ]フォルダ登録での起動と云うのは、
Windowsのブート後、ログオン画面が表示され、
(オートログオンを設定している場合は少し違うが、実際は同じ。
マシンがショボいと、一瞬ログオン画面が見えることがあるので判る)
ユーザーがログオンした後の自動起動をサポートしている。
で、グループポリシーで云うトコロの"スタートアップスクリプト"と云うのが動作するタイミングは、
前述にあるWindowsブートの後半で実行される、
つまり、ログオンより、スタートアップのほうが先行動作する・・・ なんて紛らわしい・・・
で、チョイと判ってるヒトなら、グループポリシーで、スタートアップ/ログオンスクリプトに
実行させたい対象を設定して、起動順序をある程度、制御下においてみることも試みていると思う。
本来はスクリプトを登録するのがスヂっポイのだが、実行ファイルも直接置けるし、パラメータの指定も出来る。
で、そのグループポリシーのスクリプト登録、スタートアップ/ログオン/ログオフ/シャットダウン
それぞれ、分けて設定できる、RAMドライブのような変り種利用者だったら、この意味は判るだろうし、
中々に嬉しい機能だろう。
ただ残念ながら、起動順は設定できるようだが、次の処理までの移行時間までは設定できないと見える・・・
しかしまぁ、ココでもVBScriptが使えるってコトで、だったら・・・とチョイっと作って実働させている。
▲ を、右クリックしてファイルとして保存してください。
{sScriptor}.vbe
名称変更 - 拡張子以外 可 iniファイル無しでの単独起動 - 無効 パラメータ - ナシ
|
{sScriptor}.ini
名称変更 - 拡張子以外 可
|
iniファイル内 行書式)
{アプリケーションフルパス};{Parameter};{CallType DDE or 省略};WindowType 0 or 1;{mSec(Interval)};[Title(Memo)]
{アプリケーションフルパス} 起動したいアプリケーションをフルパスで指定 {Parameter} アプリケーションに対するパラメータを記述 {CallType} rundll32.exeほかを使用したアプリケーション起動時には DDE それ以外は指定不要 {WindowType} 0(非表示) or 1(通常) {mSec(Interval)} 次の処理平衡するまでの時間を1/1000Sec単位で指定 [Title(Memo)] 機能には影響しない、タイトルなどのメモを記述
行頭に;セミコロン配置で、非実行行。
|
iniファイル例)
C:\Applications\System Tools\ProcessorManegements\CrystalCPUID\CrystalCPUID.exe;/F22 /P1 /E;;1;4000;[CrystalCPUID] C:\Applications\System Tools\Desktop Extension\IconPositionControl\KH Software Factory\KH DeskKeeper\deskkeep.exe;;;1;2500;[KH DeskKeeper] C:\Applications\System Tools\HardwareControls\Monitor Extension\CoolMonitorOff\cmoff.exe;;;;2000;[CoolMonitorOff] C:\WINDOWS\system32\SxgTkBar.exe;;;1;3000;[SxgTkBar] C:\Program Files\Microsoft Office\Office10\OSA.EXE;-b -l;;1;1500;[Microsoft Office] C:\Applications\System Tools\FEP Extension\XLangBar\XLangBar.exe;;;1;1500;[X LangBar] C:\Program Files\Windows Defender\MSASCui.exe;-hide;;;5000;[Windows Defender] C:\Program Files\LSoft Technologies Inc\Active@ Hard Disk Monitor\DiskMonitor.exe;hide;;1;3000;[DiskMonitor] C:\Applications\Maintenance Tools\Status Uty\Processor Information\ClockSpeed_D\ClockSpeed_D.exe;;;1;1500;[ClockSpeed D] C:\Program Files\Common Files\Adobe\Calibration\Adobe Gamma Loader.exe;;;;2000;[Adobe Gamma Loader] C:\WINDOWS\system32\rundll32.exe;shell32.dll,Control_RunDLL desk.cpl,,3;DDE;1;2500;[MonitorProperty DDE] ;C:\WINDOWS\system32\taskmgr.exe;;;1;2000;[TaskManeger]
|
ちなみにグループポリシーで登録するファイルは、
C:\WINDOWS\system32\GroupPolicy ├ Machine │ └ Scripts │ ├ Startup │ └ Shutdown └ User └ Scripts ├ Logon └ Logoff
|
に、保存するのが本来らしい、が、そうでなくても機能する。
しかし、[スタートアップ]フォルダのように、ココに直接ファイルを置いただけでは機能しない。
[管理ツール]-[グループポリシー (グループ ポリシー オブジェクト エディタ)]内の、
[コンピュータの構成]-[Windowsの設定]-[スクリプト(スタートアップ/シャットダウン)]
[ユーザーの構成]-[Windowsの設定]-[スクリプト(ログオン/ログオフ)]
に対し、任意の処理へGUIを使って登録する必要がある。
また、前述のように、既定フォルダ以外に配されている場合は、フルパスでの登録が必要となる。
って、設定がGUIになってるので、心配はナイが・・・
で、以下に、その設定画面の画像を並べてみたので参考にしてほしい。
なんか、このログ作るのに、また新たな副産物が出来てしまった・・・
おかげで、ソースを作ったままの見た目で うp出来るようになった。
と、云うのも、Bloggerの余計な処理のおかげで、preタグが思うように機能しなくてね(-_-;)
んで、今回分のソースなど・・・
Dim WSHShell, Fs Set WSHShell = WScript.CreateObject("WScript.Shell") Set Fs = WScript.CreateObject("Scripting.FileSystemObject") Dim sTitle, artargets, iExe, sWq, rTarget, wType, sSec Const vbWq = """" sTitle = Fs.GetBaseName(Wscript.ScriptName) arTargets = arIni(";") If IsEmpty(arTargets) Then Else For Each iExe In arTargets If IsEmpty(iExe(0)) or iExe(0) = "" Then ElseIf iExe(0) = "" Then ElseIf Fs.FileExists(iExe(0)) Then sWq = vbWq If IsEmpty(iExe(2)) or iExe(2) = "" Then ElseIf Ucase(Cstr(iExe(2))) = "DDE" Then sWq = "" End If rTarget = sWq & Cstr(iExe(0)) & sWq If IsEmpty(iExe(1)) or iExe(1) = "" then Else rTarget = rTarget & " " & sWq & Cstr(iExe(1)) & sWq End If If IsEmpty(iExe(3)) or iExe(3) = "" Then ElseIf IsNumeric(iExe(3)) Then wType = Cint(iExe(3)) Else wType = 0 End If WSHShell.Run rTarget, wType If IsEmpty(iExe(4)) or iExe(4) = "" Then ElseIf IsNumeric(iExe(4)) Then sSec = Cint(iExe(4)) WScript.Sleep sSec Else sSec = 0 End If End If Next End If Set Fs = Nothing Set WSHShell = Nothing Wscript.Quit Public Function arIni(lS) Dim sNFull, rFolder, sN, iniFile sNFull = Wscript.ScriptFullName rFolder = Fs.GetParentFolderName(sNFull) sN = Fs.GetBaseName(sNFull) iniFile = Fs.BuildPath(rFolder,sN & ".ini") If Fs.FileExists(iniFile) Then arINI = iniLoader(iniFile,lS,0) End If End Function Public Function iniLoader(iniFile, lSplitter, Control) Dim nS nS = Fs.GetFile(iniFile).size If nS = 0 Then iniLoader = Array(Fs.GetParentFolderName(iniFile)) Else If IsEmpty(lSplitter) Then lSplitter = "," End If Dim iFile, lResult, strResults, rL, iniLoaded Set iFile = Fs.OpenTextFile(iniFile,1) WScript.Sleep 150 Do Until iFile.AtEndOfStream rL = iFile.ReadLine lResult = lResult & "**" & rL & "**" Loop WScript.Sleep 150 iFile.Close strResults = Replace(Replace(lResult,"****","*"),"**","") If Control = 0 Then inArrays strResults, "*" & lSplitter, iniLoader Else iniLoader = Replace(strResults,"*",lSplitter) End If End If End Function Function inArrays(tSources, strLimitters, arReturn) Dim arSources, arLimitters, iLimitter, arInArrays, iSource, Pc arSources = tSources lArray strLimitters, arLimitters For Each iLimitter In arLimitters If VarType(arSources) = 8 Then arInArrays = Split(arSources,iLimitter) Else Pc = 0 ReDim arInArrays(0) For Each iSource in arSources ReDim Preserve arInArrays(Pc) arInArrays(Pc) = Split(iSource,iLimitter) Pc = Pc + 1 Next End If arSources = arInArrays arInArrays = Null Next arReturn = arSources End Function Function lArray(strLetters, rArray) Dim Pc, rLetters() Set objADO = CreateObject("ADODB.Stream") With objADO .Type = 2 .Open .WriteText strLetters Pc = 0 .Position = 0 Do Until .EOS ReDim Preserve rLetters(Pc) rLetters(Pc) = .ReadText(1) Pc = Pc + 1 Loop End With rArray = rLetters objADO.Close Set objADO = Nothing End Function
|
ウチの鯖タンでは、
[HKEY_USERS\.DEFAULT] や [HKEY_CURRENT_USER] 他の
[Software\Microsoft\Windows\CurrentVersion\Run] の中身を全部移行して利用している。
コイツを使って、最速起動に繋がるBoot時のスタートアップパターンとか、見つけてみるのも一興かとw
・・・ただ、タスクマネージャだけはヤメといたほうがイイよ、最小化指定で起動すると、
起動自体は出来るケド、ウインドウとして開かなくなるからww
PowerBar(のて機やUPS接続機以外では不要)は、ココには"身"の記述無かったので、触れていない。
Dr.ワトソンも、敢えて触れずにおいている。(存在忘れてたってのが正しいが・・・)
<そのまま使えるVBscript 鯖管理 起動順序 グループポリシー スタートアップ ログオン ログオフ シャットダウン>
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。