C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

mayoクラッシュ原因となるレジストリのクリア

こちらの続きです。
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を起動させてます。