2016/04/06

PSO2yomiの・・・

・・・セットアップスクリプトを、前ログの内容を踏まえて構成してみた・・・ 但し、実験の一環である。


★ 尚、
タスクスケジューラから起動されたアプリケーションは カレントディレクトリが、
64bit版Windows上で32bitアプリケーションを実行させた場合は SysWOW64 へ

64bit版Windows上で64bitアプリケーションを・・・
32bit版Windows上で32bitアプリケーションを実行させた場合は System32 に
それぞれ変わる。 従って、アプリケーションの構造次第では設定ファイル等の場所も変わる点、注意が必要。
以下 3つのスクリプトを、任意に配置しているであろう PSO2yomi のフォルダへ格納した上で、Setup.vbsのみを実行する。
■ Setup.vbs
このスクリプトは、タスクスケジューラへの登録を行った後、スケジュールの直接起動[PSO2yomi]と
遅延起動スクリプト[PSO2yomiD5]への ショートカットを PSO2yomi のアイコンを割り当てた状態で デスクトップに作成する。

タスクスケジューラから 最高権限で PSO2yomi を 起動させるよう構成を展開しているのが このスクリプトの肝。
因って 配置された何れのショートカットから起動しても、UACの確認画面は表示されない。

また、PSO2yomi のフォルダを 別の場所に移設した場合にも、そのフォルダ内で Setup.vbs を実行するだけで、
タスクスケジューラの登録 と デスクトップのショートカット は 適宜補正される

'***** ↓↓↓ScriptTitle↓↓↓ ********************************************************* ' Setup.vbs for PSO2yomi '- Created by LazwardFox - ' Update 20160406 110429 ' Update 20160406 073642 ' Update 20160406 061729 ' Update 20160405 124029 ' Release 20160405 112110 ' DevStart 20160405 110037 '***** ↓↓↓ Memo ↓↓↓ ************************************************************** ' psuyomi2.config を システムフォルダへ複製する処理は、 ' 外部スクリプト confCopy.vbs に依存。 '***** ↓↓↓ ObjectDecralations ↓↓↓ ************************************************* Option Explicit Dim My, MySh, Fs, ShApp Set My = WScript With My Set ShApp = .CreateObject("Shell.Application") Set MySh = .CreateObject("WScript.Shell") Set Fs = .CreateObject("Scripting.FileSystemObject") End With '***** ↓↓↓ConstructDecralations↓↓↓ *********************************************** Const vbWq = """" ' 文字列データに ダブルクォーテーションを利用する為の変数。 Const strSys = "C:\Windows\System32" Const schName = "amami\PSO2yomi" Const appName = "PSO2yomi.exe" Const procName = "pso2.exe" Const delayTime = "0005:00" ' ← 5min Const scName = "PSO2yomi" Const scD5Name = "PSO2yomiD5" '***** ↓↓↓AuthDecralations↓↓↓ **************************************************** '***** ↓↓↓FileControlDecralations↓↓↓ ********************************************* Dim strRoot, strD5Full Dim strDesktop, strWs ', strStartup strWs = Fs.BuildPath(strSys, "wscript.exe") strDesktop = MySh.SpecialFolders("Desktop") 'strStartup = MySh.SpecialFolders("STARTUP") strRoot = Fs.GetParentFolderName(My.ScriptFullName) strD5Full = Fs.BuildPath(strRoot, scD5Name & ".vbs") '***** ↓↓↓ValiableConstDecralations↓↓↓ ******************************************* Dim schtasks, strAppPath, strConfPath, strSch schtasks = Fs.BuildPath(strSys, "schtasks.exe") strAppPath = Fs.BuildPath(strRoot, appName) strSch = "/create /f /it /sc onevent /rl highest /tn " & vbWq & schName & vbWq & _ " /tr " & vbWq & "'" & strAppPath & "'" & vbWq & " /ec Application " & _ "/mo *[System[Provider[@Name='" & procName & "']]] /delay " & delayTime '***** ↓↓↓MainRoutine↓↓↓ ********************************************************* On Error Resume Next setSchedule strSch scCreate schtasks, "/Run /TN " & schName, strRoot, scName, strDesktop, strAppPath, 7 scCreate strWs, vbWq & strD5Full & vbWq, strRoot, scD5Name, strDesktop, strAppPath, 7 ShApp.ShellExecute strWs, vbWq & Fs.BuildPath(strRoot, "confCopy.vbs") & vbWq , "", "runas", 0 Set ShApp = Nothing Set Fs = Nothing Set MySh = Nothing My.Quit '***** ↓↓↓ GlobalFunctions ↓↓↓ *************************************************** '------------------------------------ ' setSchedule ' - Created by LazwardFox - ' Release 20160405 121143 ' DevStart 20160405 113411 Function setSchedule(setSch) ShApp.ShellExecute schtasks, setSch, "", "runas", 0 End Function '------------------------------------ ' scCreate - ショートカットを作成。 ' 指定ファイルを {指定名称}で {指定フォルダ}に・・・ ' 未指定だとファイルのあるフォルダに。 ' - Created by LazwardFox - ' Update 20160406 110712 - ' Release 20151024 001034 - 別ファイルのアイコンを設定可能に。 ' βRelease 20151023 202155 - ' DevStart 20151023 195054 ' scCreate ( strTarget - 対象ファイルのフルパス。 ' , strParameters - 対象ファイルへのパラメータ。 ' , strWorkFolder - 作業フォルダ。 ' , strDescription - ショートカットの名称。 ' , strScSetTarget - ショートカットの配置先フォルダ。 ' , strIcon - アイコンを別のファイルで ' , nWindow - ウィンドウサイズ指定 ) Function scCreate(strTarget, strParameters, strWorkFolder, _ strDescription, strScSetTarget, strIcon, nWindow) Dim strParentFolder, strBaseName, strFileName Dim strExtention, strCreate Dim objSc strBaseName = Fs.GetbaseName(strTarget) strFileName = Fs.GetFileName(strTarget) strExtention = Replace(strFileName, strBaseName, "") strParentFolder = Fs.GetParentFolderName(strTarget) If strDescription = "" Then strDescription = strBaseName End If If strWorkFolder = "" Then strWorkFolder = strParentFolder End If If strScSetTarget = "" Then strScSetTarget = strParentFolder End If strCreate = Fs.BuildPath(strScSetTarget, strDescription & ".lnk") If Fs.FileExists(strCreate) Then Fs.DeleteFile strCreate, True End If If strIcon = "" Then strIcon = strTarget End If If Fs.FileExists(strIcon) Then Else strIcon = strTarget End If Set objSc = MySh.CreateShortcut(strCreate) With objSc .TargetPath = vbWq & strTarget & vbWq .Arguments = strParameters .WorkingDirectory = strWorkFolder .WindowStyle = nWindow .Description = strDescription .IconLocation = strIcon & ",0" .Save End With End Function
■ confCopy.vbs
設定ファイル [psuyomi2.config] が 既存の場合、システムフォルダへ複製する。
ファイルの書き込みに際して UACを介する必要がある為、Setup.vbs から呼び出して用いる。

'***** ↓↓↓ScriptTitle↓↓↓ ********************************************************* ' confCopy.vbs '- Created by LazwardFox - ' Release 20160406 132226 '***** ↓↓↓ Memo ↓↓↓ ************************************************************** ' Setup.vbs より、管理者としてExecされない限り、UACに因り機能しない。 '***** ↓↓↓ ObjectDecralations ↓↓↓ ************************************************* Option Explicit Dim My, Fs, ShApp Set My = WScript With My Set Fs = .CreateObject("Scripting.FileSystemObject") End With '***** ↓↓↓ConstructDecralations↓↓↓ *********************************************** Const vbWq = """" ' 文字列データに ダブルクォーテーションを利用する為の変数。 Const strSys = "C:\Windows\System32" Const strWOW = "C:\Windows\SysWOW64" Const appConf = "psuyomi2.config" '***** ↓↓↓FileControlDecralations↓↓↓ ********************************************* Dim strRoot, strConfPath strRoot = Fs.GetParentFolderName(My.ScriptFullName) strConfPath = Fs.BuildPath(strRoot, appConf) '***** ↓↓↓MainRoutine↓↓↓ ********************************************************* On Error Resume Next If Fs.FileExists(strConfPath) Then If Fs.FolderExists(strWOW) Then Fs.CopyFile strConfPath, strWOW & "\", False Else Fs.CopyFile strConfPath, strSys & "\", False End If End If Set Fs = Nothing My.Quit
■ PSO2YomiD5.vbs
スクリプト実行開始から 5分後にPSO2Yomiをタスクスケジューラから起動する。

[Setup.vbs] で作成されるショートカット [PSO2yomiD5] で 起動出来る。

このスクリプトは、PSO2本体を起動する前に実行して用いる・・・
PSO2 フルスクリーン稼動の裏で、ひっそりと PSO2yomi を遅延スタートさせるコトが可能。

スクリプトの中に ログインパスワードをセットしておけば、クリップボードに格納する。
クリップボードは、PSO2Yomi起動直前に初期化される・・・ その時点でログインが済んでいる前提。

'***** ↓↓↓ScriptTitle↓↓↓ ********************************************************* ' PSO2YomiD5.vbs '- Created by LazwardFox - ' Update 20160406 081525 ' Update 20160406 061729 ' Update 20160405 124029 ' Release 20160405 112110 ' DevStart 20160405 110037 '***** ↓↓↓ Memo ↓↓↓ ************************************************************** ' '***** ↓↓↓ ObjectDecralations ↓↓↓ ************************************************* Option Explicit Dim My, MySh, ShApp Set My = WScript With My Set MySh = .CreateObject("WScript.Shell") Set ShApp = .CreateObject("Shell.Application") End With '***** ↓↓↓ConstructDecralations↓↓↓ *********************************************** Const vbWq = """" ' 文字列データに ダブルクォーテーションを利用する為の変数。 '***** ↓↓↓AuthDecralations↓↓↓ **************************************************** '***** ↓↓↓ValiableConstDecralations↓↓↓ ******************************************* Dim schtasks, strPass ', strPSO2c, strPSO2 strPass = "{PSO2LoginPassword}" schtasks = "C:\Windows\System32\schtasks.exe" 'strPSO2c = "C:\Program Files (x86)\SEGA\PHANTASYSTARONLINE2\pso2_bin" 'strPSO2 = "\pso2launcher.exe" '***** ↓↓↓FileControlDecralations↓↓↓ ********************************************* '***** ↓↓↓MainRoutine↓↓↓ ********************************************************* On Error Resume Next ClipSet strPass 'ShApp.ShellExecute strPSO2c & strPSO2,, strPSO2c, "runas", 1 My.Sleep 300000 ClipSet "" ShApp.ShellExecute schtasks, "/Run /TN amami\PSO2yomi", "", "", 0 Set ShApp = Nothing Set MySh = Nothing My.Quit '***** ↓↓↓ GlobalFunctions ↓↓↓ *************************************************** '------------------------------------ ' ClipSet - クリップボードへ文字列を代入。 ' - Created by LazwardFox - ' MySh ' Update ' Release ' Update 20160405 121153 ' βRelease 20150608 112249 ' DevStart 20150608 110745 Function ClipSet(strTarget) Dim exClips exClips = "cmd /c " & vbWq & "echo " & strTarget & "| clip" & vbWq MySh.Run exClips, 0 My.Sleep 300 End Function
赤文字の部分を各位で書き換えて使う。 少し 非実行箇所を有効化するだけで、PSO2ランチャの起動から 順番に処理出来るようにはしてあるのだが、 最初だけ user.pso2ファイル(ウィンドウ位置など)が初期化される(´ヘ`;) ・・・試用はしたが実運用はしておらず、有効化は推奨しない。 仮に、もし 有効にする場合は、
に 格納されている user.pso2 の バックアップを取り、自己責任にて。
★ 尚、
このスクリプトセットは、タスクスケジューラへの登録や UAC回避でのシステムフォルダへのファイル書き込みなどの
"処理の模索を行った結果" である・・・ おきつね環境では利用しているが、一般向けとして仕立てたモノではナイ。

利用に際しては、その点 重々留意されたし。

0 件のコメント:

コメントを投稿