はじめまして。VBで開発をしております。
プログラム実行中に「ODBCデータソースアドミニストレータ」に起動制限を
かけるため、RegSetValueExを使ってレジストリに値を設定しています。
ただし、通常再起動しないとレジストリの変更が反映されないため、
WSHのRunメソッドを使用し、レジストリの設定値を最新の情報に更新する処理を
追加しました。
しかし、プログラムを実行しても「ODBCアドミニストレータ」の起動制御が
成功する場合と失敗する場合がありとても不安定な状態となっています。
・起動制御が成功した場合は「ODBCアドミニストレータ」を起動すると
「制限されている」旨のメッセージが表示され起動できません。
・起動制御が失敗すると、特に何のメッセージも表示されず起動します。
起動制御を安定させたいのですがどうしたらよいでしょうか?
ご存知の方がいらっしゃいましたら、ご教授ください。
よろしくお願いいたします。
コードは↓です。
'オブジェクトの作成
Dim oShell As Object
'レジストリーキー
Const C_sKeyExplorer = "SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer"
Const C_sKeyRun = "SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer
\DisallowRun"
lValue = 1
'キーを開く
'(HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies \Explorer)
glRtn = RegCreateKeyEx(HKEY_CURRENT_USER, C_sKeyExplorer, 0, _
vbNullString,REG_OPTION_NON_VOLATILE, KEY_SET_VALUE, _
typSecurityAttributes, lHandleRegKey, lDisposition)
'DisallowRunのDword作成
glRtn = RegSetValueEx(lHandleRegKey, "DisallowRun", 0, REG_DWORD, _
lValue, Len(lValue))
'キーを閉じる
glRtn = RegCloseKey(lHandleRegKey)
'キーの作成
'(HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion
\Policies\Explorer\DisallowRun)
glRtn = RegCreateKeyEx(HKEY_CURRENT_USER, C_sKeyRun, 0,_
vbNullString, REG_OPTION_NON_VOLATILE, KEY_SET_VALUE, _
typSecurityAttributes, lHandleRegKey, lDisposition)
'キーの下に1というDWORDを作成する
glRtn = RegSetValueEx(lHandleRegKey, "1", 0, REG_SZ, _
ByVal "odbcad32.exe", ByVal CLng(12))
'キーを閉じる
glRtn = RegCloseKey(lHandleRegKey)
'セキュリティ設定を最新の情報に更新する
glRtn = oShell.run("cmd /q /c secedit /refreshpolicy
user_policy /enforce", 0, True)
大変申し訳ありません。
内容的に「Q&A」に記載した方がよいのではないかということに
気がつきましたので、
こちらの「初心者掲示板」の方は一度「解決」扱いにさせて頂きます。
「Q&A」の方に再度記載させて頂きますのでよろしくお願いいたします。