ODBCデータソースアドミニストレータを起動制御するには?


POOL  2004-06-30 17:45:25  No: 84313  IP: [192.*.*.*]

「初心者掲示板」の方に一度記載させて頂いたのですが、
内容的にこちらの「Q&A」に記載した方がよいのではないかということに
気が付きましたので、「初心者掲示板」の方は一度「解決」扱いにさせて頂き、
こちらの「Q&A」の方に再度記載させて頂きました。
よろしくお願いいたします。


VB6(SP5)で開発を行っています。
プログラム実行中に「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)

編集 削除