C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: レジストリの値の削除


(過去ログ 95 を表示中)

[トピック内 16 記事 (1 - 16 表示)]  << 0 >>

■56849 / inTopicNo.1)  レジストリの値の削除
  
□投稿者/ 風夏 (1回)-(2011/02/03(Thu) 10:55:25)

分類:[VB6 以前] 

お世話様になります。
風夏と申します。

レジストリの削除について教えて下さい。
下記環境でレジストリに作成したキーを削除したいのですが、
削除が出来ません。

OS:WindowsServer2008R2
言語:VB5 SP3

下記のように処理を書きました。
間違い等、ご指摘頂ければと思います。
宜しくお願い申し上げます。

-------------------------------------------------------------------------------------

' 指定されたレジストリ値を削除する。
Declare Function RegDeleteKey Lib "ADVAPI32.dll" Alias "RegDeleteValueA" _
(ByVal hKey As Long, _
ByVal lpValueName As String) As Long


Public Enum hKeyConstants
HKEY_CLASSES_ROOT = &H80000000
HKEY_CURRENT_USER = &H80000001
HKEY_LOCAL_MACHINE = &H80000002
HKEY_USERS = &H80000003
HKEY_PERFORMANCE_DATA = &H80000004
HKEY_CURRENT_CONFIG = &H80000005
HKEY_DYN_DATA = &H80000006
End Enum

-------------------------------------------------------------------------------------

Private Sub Command1_Click(Index As Integer)
Dim Ret As Boolean
Dim Subkey As String

If Index = 0 Then

'キーを設定する。
   Subkey = "SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters"

'値を設定する
Ret = RegSetValue(hKeyConstants.HKEY_LOCAL_MACHINE, Subkey, "SMB2", REG_DWORD, 0)

Else

'キーを設定する。
Subkey = "SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\SMB2"

'削除する。
Ret = RegDeleteKey(hKeyConstants.HKEY_LOCAL_MACHINE, Subkey)

End If

End Sub
-------------------------------------------------------------------------------------
引用返信 編集キー/
■56853 / inTopicNo.2)  Re[1]: レジストリの値の削除
□投稿者/ 渋木宏明 (57回)-(2011/02/03(Thu) 12:54:14)
渋木宏明 さんの Web サイト
>OS:WindowsServer2008R2
>言語:VB5 SP3

レジストリ仮想化にひっかかってるとか。

32bit 版の regedit とかで確認してますか?

引用返信 編集キー/
■56855 / inTopicNo.3)  Re[2]: レジストリの値の削除
□投稿者/ todo (112回)-(2011/02/03(Thu) 13:04:06)
> Ret = RegDeleteKey(hKeyConstants.HKEY_LOCAL_MACHINE, Subkey)

まずは戻り値(エラーコード)の調査。

引用返信 編集キー/
■56856 / inTopicNo.4)  Re[2]: レジストリの値の削除
□投稿者/ 風夏 (2回)-(2011/02/03(Thu) 13:30:06)
No56853 (渋木宏明 さん) に返信
> >OS:WindowsServer2008R2
> >言語:VB5 SP3
>
> レジストリ仮想化にひっかかってるとか。
>
> 32bit 版の regedit とかで確認してますか?
>

渋木さん、お世話様になります。
風夏と申します。

早速WindowsXP(32bit)でも試してみましたが、削除が出来ませんでした。
OSは関係なかったようです。
他に何か原因がありますでしょうか?
引用返信 編集キー/
■56857 / inTopicNo.5)  Re[3]: レジストリの値の削除
□投稿者/ 風夏 (3回)-(2011/02/03(Thu) 13:31:59)
No56855 (todo さん) に返信
>>Ret = RegDeleteKey(hKeyConstants.HKEY_LOCAL_MACHINE, Subkey)
>
> まずは戻り値(エラーコード)の調査。
>

todoさん、お世話様になります。
風夏と申します。

戻り値はTureでした。
他に何か調査できるところはありますでしょうか?
引用返信 編集キー/
■56859 / inTopicNo.6)  Re[4]: レジストリの値の削除
□投稿者/ 魔界の仮面弁士 (2048回)-(2011/02/03(Thu) 14:05:51)
No56857 (風夏 さん) に返信
>>> Dim Ret As Boolean
API 側の戻り値は As Long で宣言されているのですよね。
それを受ける変数を、わざわざ Boolean 型に変更しているのは、何か理由があるのでしょうか?

> >>Ret = RegDeleteKey(hKeyConstants.HKEY_LOCAL_MACHINE, Subkey)
> 戻り値はTureでした。

…Tureですか?(連れ?)

RegDeleteKey の戻り値は「正常時は 0、失敗すると 0 以外」のはずですが、
具体的にはどのような値が返されているのでしょうか。
引用返信 編集キー/
■56863 / inTopicNo.7)  Re[1]: レジストリの値の削除
□投稿者/ 魔界の仮面弁士 (2049回)-(2011/02/03(Thu) 14:41:52)
No56849 (風夏 さん) に返信
> OS:WindowsServer2008R2
> 言語:VB5 SP3
うわぉ。(^_^;)

> ' 指定されたレジストリ値を削除する。
API ではなく、RegDelete メソッドで削除した場合はどうなりますか?

CreateObject("WScript.Shell").RegDelete "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\SMB2"


> Ret = RegDeleteKey(hKeyConstants.HKEY_LOCAL_MACHINE, Subkey)
第一引数に HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters のハンドルを渡し、
第二引数を SMB2 だけにしてみてください。


> Ret = RegSetValue(hKeyConstants.HKEY_LOCAL_MACHINE, Subkey, "SMB2", REG_DWORD, 0)
RegSetValue API ではなく、
RegSetValueEx API を使った方が良いですよ。

…というか、本来の RegSetValue API とは引数定義が違っているようですが、
これは自作の Function なのでしょうか?

今回のように、コードの一部を掲示板に掲載するような場合には、
既存の API と同じ名前は使わない方が良いと思いますよ。混乱の元ですから。
引用返信 編集キー/
■56864 / inTopicNo.8)  Re[5]: レジストリの値の削除
□投稿者/ 風夏 (4回)-(2011/02/03(Thu) 14:54:15)
No56859 (魔界の仮面弁士 さん) に返信
> ■No56857 (風夏 さん) に返信
> >>> Dim Ret As Boolean
> API 側の戻り値は As Long で宣言されているのですよね。
> それを受ける変数を、わざわざ Boolean 型に変更しているのは、何か理由があるのでしょうか?
>
>>>>Ret = RegDeleteKey(hKeyConstants.HKEY_LOCAL_MACHINE, Subkey)
>>戻り値はTureでした。
>
> …Tureですか?(連れ?)
>
> RegDeleteKey の戻り値は「正常時は 0、失敗すると 0 以外」のはずですが、
> 具体的にはどのような値が返されているのでしょうか。

魔界の仮面弁士さん、お世話様になります。
風夏と申します。

すいません、RetをBooleanにしたのに意味はないんです。(^▽^;)
戻り値は『2』が返っていました。
ってことは失敗になると思うのですが、何かおかしい箇所はありますでしょうか?
引用返信 編集キー/
■56866 / inTopicNo.9)  Re[2]: レジストリの値の削除
□投稿者/ 風夏 (5回)-(2011/02/03(Thu) 14:56:36)
No56863 (魔界の仮面弁士 さん) に返信
> ■No56849 (風夏 さん) に返信
>>OS:WindowsServer2008R2
>>言語:VB5 SP3
> うわぉ。(^_^;)
>
>>' 指定されたレジストリ値を削除する。
> API ではなく、RegDelete メソッドで削除した場合はどうなりますか?
>
> CreateObject("WScript.Shell").RegDelete "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\SMB2"
>
>
>>Ret = RegDeleteKey(hKeyConstants.HKEY_LOCAL_MACHINE, Subkey)
> 第一引数に HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters のハンドルを渡し、
> 第二引数を SMB2 だけにしてみてください。
>
>
>>Ret = RegSetValue(hKeyConstants.HKEY_LOCAL_MACHINE, Subkey, "SMB2", REG_DWORD, 0)
> RegSetValue API ではなく、
> RegSetValueEx API を使った方が良いですよ。
>
> …というか、本来の RegSetValue API とは引数定義が違っているようですが、
> これは自作の Function なのでしょうか?
>
> 今回のように、コードの一部を掲示板に掲載するような場合には、
> 既存の API と同じ名前は使わない方が良いと思いますよ。混乱の元ですから。

仮面弁士さん、こちらにもありがとうございます。

上記の手法を試してみたいと思います。
>混乱の元ですから。
すいませんでした、色々不慣れでして・・・。

またヨロシクお願いいたします。

引用返信 編集キー/
■56868 / inTopicNo.10)  Re[3]: レジストリの値の削除
□投稿者/ GOD (3回)-(2011/02/03(Thu) 15:11:11)
「SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\SMB2」というキーはありますか?
RegSetValue 側を見ると「SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters」というキーの中にある「SMB2」に値を設定しているみたいですが。

引用返信 編集キー/
■56870 / inTopicNo.11)  Re[6]: レジストリの値の削除
□投稿者/ 魔界の仮面弁士 (2050回)-(2011/02/03(Thu) 16:09:20)
No56864 (風夏 さん) に返信
> すいません、RetをBooleanにしたのに意味はないんです。(^▽^;)
> 戻り値は『2』が返っていました。
2 が何を意味するかを調査されましたか?

 ERROR_FILE_NOT_FOUND
 0x00000002
 指定されたファイルが見つかりません。
 The system cannot find the file specified.

指定した文字列が間違っていたとか、そもそも存在しないキー(既に削除されていた場合も含む)を
対象にした場合も同じエラーが返される事になります。

> ってことは失敗になると思うのですが、何かおかしい箇所はありますでしょうか?
既に挙がっている回答を試してみてください。
当方ではその修正で削除することができましたので。


> > 混乱の元ですから。
> すいませんでした、色々不慣れでして・・・。
自作の Function だったという事でしょうか?
引用返信 編集キー/
■56873 / inTopicNo.12)  Re[7]: レジストリの値の削除
□投稿者/ 風夏 (6回)-(2011/02/03(Thu) 16:23:18)
No56870 (魔界の仮面弁士 さん) に返信
> ■No56864 (風夏 さん) に返信
>>すいません、RetをBooleanにしたのに意味はないんです。(^▽^;)
>>戻り値は『2』が返っていました。
> 2 が何を意味するかを調査されましたか?
>
>  ERROR_FILE_NOT_FOUND
>  0x00000002
>  指定されたファイルが見つかりません。
>  The system cannot find the file specified.
>
> 指定した文字列が間違っていたとか、そもそも存在しないキー(既に削除されていた場合も含む)を
> 対象にした場合も同じエラーが返される事になります。
>
>>ってことは失敗になると思うのですが、何かおかしい箇所はありますでしょうか?
> 既に挙がっている回答を試してみてください。
> 当方ではその修正で削除することができましたので。
>
>
>>> 混乱の元ですから。
>>すいませんでした、色々不慣れでして・・・。
> 自作の Function だったという事でしょうか?


仮面弁士さん、お世話様になります。
自作のFunctionでした。気づきませんでした・・・。

>  指定されたファイルが見つかりません。
キーの場所はあっていると思うのですが・・・。

もうひとつのほうで教えて頂きました内容で無事に削除できました♪
本当にありがとうございました。

解決済み
引用返信 編集キー/
■56874 / inTopicNo.13)  Re[4]: レジストリの値の削除
□投稿者/ 風夏 (7回)-(2011/02/03(Thu) 16:24:48)
No56868 (GOD さん) に返信
> 「SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\SMB2」というキーはありますか?
> RegSetValue 側を見ると「SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters」というキーの中にある「SMB2」に値を設定しているみたいですが。
>

GODさん、お世話様になります。
風夏と申します。

ひょっとして、削除方法がそもそも違います?
〜Parametersの中にあるSMB2を削除したいのですが・・・。
引用返信 編集キー/
■56875 / inTopicNo.14)  Re[3]: レジストリの値の削除
□投稿者/ 風夏 (8回)-(2011/02/03(Thu) 16:27:25)
No56866 (風夏 さん) に返信
> ■No56863 (魔界の仮面弁士 さん) に返信
>>■No56849 (風夏 さん) に返信
> >>OS:WindowsServer2008R2
> >>言語:VB5 SP3
>>うわぉ。(^_^;)
>>
> >>' 指定されたレジストリ値を削除する。
>>API ではなく、RegDelete メソッドで削除した場合はどうなりますか?
>>
>>CreateObject("WScript.Shell").RegDelete "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\SMB2"
>>
>>
> >>Ret = RegDeleteKey(hKeyConstants.HKEY_LOCAL_MACHINE, Subkey)
>>第一引数に HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters のハンドルを渡し、
>>第二引数を SMB2 だけにしてみてください。
>>
>>
> >>Ret = RegSetValue(hKeyConstants.HKEY_LOCAL_MACHINE, Subkey, "SMB2", REG_DWORD, 0)
>>RegSetValue API ではなく、
>>RegSetValueEx API を使った方が良いですよ。
>>
>>…というか、本来の RegSetValue API とは引数定義が違っているようですが、
>>これは自作の Function なのでしょうか?
>>
>>今回のように、コードの一部を掲示板に掲載するような場合には、
>>既存の API と同じ名前は使わない方が良いと思いますよ。混乱の元ですから。
>
> 仮面弁士さん、こちらにもありがとうございます。
>
> 上記の手法を試してみたいと思います。
> >混乱の元ですから。
> すいませんでした、色々不慣れでして・・・。
>
> またヨロシクお願いいたします。
>

仮面弁士さん、お世話様になります。
>CreateObject("WScript.Shell").RegDelete "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\SMB2"
これで消すことが出来ました。
SMB2が有効になっていると、STOPエラーが発生してしまう可能性があり、
設定・解除が簡単に出来るツールがどうしても必要だったので、
本当に助かりました。
ありがとうございました♪

解決済み
引用返信 編集キー/
■56879 / inTopicNo.15)  Re[4]: レジストリの値の削除
□投稿者/ 魔界の仮面弁士 (2051回)-(2011/02/03(Thu) 17:10:21)
2011/02/03(Thu) 17:35:31 編集(投稿者)

# 一応、解決済みチェックは付けたままにしておきます。

No56875 (風夏 さん) に返信
>> CreateObject("WScript.Shell").RegDelete "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\SMB2"
> これで消すことが出来ました。
そちらの案を採用するのであれば、キー登録の方についても
 CreateObject("WScript.Shell").RegWrite "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\SMB2", 0, "REG_DWORD"
を利用しないと、コードに対称性が無くなってしまいますよ。

あるいは逆に、API で統一するのであれば、
>>> Ret = RegDeleteKey(hKeyConstants.HKEY_LOCAL_MACHINE, Subkey)
>> 第一引数に HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters のハンドルを渡し、
>> 第二引数を SMB2 だけにしてみてください。
の手法を試してみてください。


> 設定・解除が簡単に出来るツールがどうしても必要だったので、
SMB2 の削除だけなら、VB5 でわざわざコーディングせずとも、『ファイル名を指定して実行』から

 REG DELETE HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters /v SMB2

を実行してもらうだけで良い気がします(削除前の確認が不要なら /f オプション付きで)。

あるいは上記の一行を書いた *.cmd ファイルを用意しておき、それをダブルクリックしてもらうとか、
登録用/削除用の *.reg ファイルを用意しておくとか。
解決済み
引用返信 編集キー/
■56885 / inTopicNo.16)  Re[5]: レジストリの値の削除
□投稿者/ 風夏 (9回)-(2011/02/03(Thu) 18:21:30)
No56879 (魔界の仮面弁士 さん) に返信
> 2011/02/03(Thu) 17:35:31 編集(投稿者)
>
> # 一応、解決済みチェックは付けたままにしておきます。
>
> ■No56875 (風夏 さん) に返信
> >> CreateObject("WScript.Shell").RegDelete "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\SMB2"
>>これで消すことが出来ました。
> そちらの案を採用するのであれば、キー登録の方についても
>  CreateObject("WScript.Shell").RegWrite "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\SMB2", 0, "REG_DWORD"
> を利用しないと、コードに対称性が無くなってしまいますよ。
>
> あるいは逆に、API で統一するのであれば、
> >>> Ret = RegDeleteKey(hKeyConstants.HKEY_LOCAL_MACHINE, Subkey)
> >> 第一引数に HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters のハンドルを渡し、
> >> 第二引数を SMB2 だけにしてみてください。
> の手法を試してみてください。
>
>
>>設定・解除が簡単に出来るツールがどうしても必要だったので、
> SMB2 の削除だけなら、VB5 でわざわざコーディングせずとも、『ファイル名を指定して実行』から
>
>  REG DELETE HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters /v SMB2
>
> を実行してもらうだけで良い気がします(削除前の確認が不要なら /f オプション付きで)。
>
> あるいは上記の一行を書いた *.cmd ファイルを用意しておき、それをダブルクリックしてもらうとか、
> 登録用/削除用の *.reg ファイルを用意しておくとか。

仮面弁士さん、お世話様になります。

regファイルでもいいかな?とも思ったのですが、
全く詳しくない高齢の方が使用することも想定されますので、
画面でそれなりに説明が出来たほうがよいと思いまして、
VB5で作ろうかなぁと思った次第です。(メインのアプリがVB5なので)

>コードに対称性が無くなってしまいますよ。
設定するほうも
CreateObject("WScript.Shell").RegWrite "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\SMB2", 0, "REG_DWORD"
を利用させて頂こうと思います。
色々と丁寧にご指摘頂きまして、本当にありがとうございます。


解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -