こちらの続きです。
mayo起動しなくなる・・・(復旧方法あり) - C#ATIA
2バイト文字を含むファイルパスのファイルを開いた際、
再起動時にクラッシュする現象ですが、対策としては特定の
レジストリをクリアするしか方法が無いことがわかっています。
毎回レジストリエディタを起動するのはかなり抵抗あります。
調べたところVBScriptでレジストリの値を書き換えられるのですね。
知りませんでした。
ということで、あのレジストリの値をクリアしてしまうVBScriptです。
'vbs Language = "VBSCRIPT" '*** 正しく設定して下さい *** 'こちらのソフトを事前にインストールしてください 'https://github.com/fougue/mayo 'mayoの実行ファイルパス Const MAYO_PATH = "C:\Program Files\Fougue\Mayo\mayo.exe" 'クリアするレジストリ-2バイト文字対策 'https://github.com/fougue/mayo/issues/177 CONST REGISTRY_KEY = "HKEY_CURRENT_USER\SOFTWARE\Fougue Ltd\Mayo\application\lastOpenFolder" '*** Const HKEY_LOCAL_MACHINE = &H80000002 Call Main WScript.Quit 0 '********************************* Sub Main() ' チェック If Not can_execute() Then Exit Sub ' レジストリの値をクリア if exist_key(REGISTRY_KEY) then clearing_registry(REGISTRY_KEY) end if End Sub '実行前チェック Private Function can_execute() can_execute = True Dim res res = is_exists(MAYO_PATH) If Not res Then MsgBox "mayoの実行ファイルパスが正しくありません。修正してください。" can_execute = False End If End Function ' レジストリの値をクリア Private Sub clearing_registry(key) Dim objWsh Set objWsh = CreateObject("Wscript.Shell") call objWsh.RegWrite(key, "") End Sub ' レジストリキーの有無 Private Function exist_key(key) Dim objRegistry Set objRegistry =GetObject("winmgmts:root\default:StdRegProv") if objRegistry.EnumKey(HKEY_LOCAL_MACHINE, key, arrSubKeys) = 2 then exist_key = True else exist_key = False end if end Function ' *** IO *** 'FileSystemObject Private Function get_fso() 'As Object Set get_fso = CreateObject("Scripting.FileSystemObject") End Function 'ファイルの有無 Private Function is_exists(ByVal path) 'As Boolean is_exists = get_fso.FileExists(path) End Function
実行しても警告なども出ないんですね・・・大丈夫かなwindows。
実行前。
実行後。
僕はついでにmayoを起動させてます。