web-dev-qa-db-ja.com

regsvr32は何をしますか?

DLLファイルをregsvr32を使用してWindowsサーバーに登録するには、最初にファイルをsystem32フォルダに移動する必要がありますか、それとも実際にregsvr32コマンド?

デスクトップにdllファイルをドロップしてそこに登録するだけの場合、登録後に削除できますか?削除するとどうなりますか?

言い換えれば、regsvrは実際にはどのように機能するのでしょうか。

7
bvdb

@Matthew Wetmoreの正解に加えて、通常起こることは、すべてのCOMコンポーネントをそのDLLに登録することです。

具体的には、Windowsレジストリに2つのキー(+サブキー)を作成します。

例えば。 DLLを検討してください:dao360.dll。内部に複数のCOMオブジェクトがあります。それぞれの最初のキーは次のようなものです:

HKLM\SOFTWARE\Classes\DAO.TableDef.36

dAOテーブル定義オブジェクトの場合、キーの名前は、プログラマーがコードで参照するCOMオブジェクトのProgIDです。

キーの下には通常、デフォルト値を持つ単一のキーがあります。

HKLM\SOFTWARE\Classes\DAO.TableDef.36\CLSID

この場合:

{00000103-0000-0010-8000-00AA006D2EA4}

これはCOMオブジェクトのクラスIDまたはCLSIDであり、2番目のキーがどこにあるかを示します。

HKLM\SOFTWARE\Classes\CLSID {00000103-0000-0010-8000-00AA006D2EA4}

サブキーと値を持つこのキーには、COMオブジェクトに関する追加情報があります。

注意すべき1つの値は、以下のデフォルト値です。

HKLM\SOFTWARE\Classes\Wow6432Node\CLSID {00000103-0000-0010-8000-00AA006D2EA4}\InprocServer32

この例では、COMオブジェクトをホストするexe/dllのファイルパスがあります。

%CommonProgramFiles%\Microsoft Shared\DAO\dao360.dll

これは、regsvr32.exeを使用してこのCOMオブジェクトを登録したときの正しいファイルパスです。ファイルを手動で移動すると、このレジストリ値が不足しているファイルを参照するようになるため、COMオブジェクトは機能しなくなります。

したがって、DLLでregsvr32.exeを使用する前に、それを最終的な場所に移動し、登録後にDLL)を移動しないでください。

5
Peter Hahndorf

RegSvr32は、DLLのエクスポートされたメソッド DllRegisterServer を呼び出します。次に具体的に何が起こるかは実装次第です。多くの場合、COMのレジストリキーはファイルの場所に基づいて書き込まれます。登録は、一般的に、それをはるかに超えるインストーラと見なされるべきではありません。

アプリに固有のものがない限り、どこからでも登録できますが、その後は移動/削除しないでください。 SysInternalのSysMon 本当に詳細を確認したい場合は、登録を呼び出すときにファイルとレジストリへのアクセスを監視できます。または、他のファイルなどを削除します。他の実行可能ファイルと同様に、信頼できるコードのみを登録してください。

DllInstall もあります。これはregsvr32 /iで呼び出すことができ、これは regsvr32ドキュメント に従ってインストーラーであることを意味します。

Regsvr32
このコマンドラインツールは、.dllファイルをレジストリのコマンドコンポーネントとして登録します。
構文
regsvr32 [/ u] [/ s] [/ n] [/ i [:cmdline]] dllname
パラメータ
/ u:サーバーの登録を解除します。
/ s:regsvr32をサイレントに実行し、メッセージボックスを表示しないように指定します。
/ n:DllRegisterServerを呼び出さないように指定します。このオプションは/ iと一緒に使用する必要があります。
/ i:cmdline:オプションの[cmdline]を渡してDllInstallを呼び出します。/uと共に使用すると、dllのアンインストールが呼び出されます。
dllname:登録するdllファイルの名前を指定します。
/?:コマンドプロンプトにヘルプを表示します。

DllUnregisterServer もありますが、実際の経験から、これの実装は通常、登録よりも低品質です。

Windowsインストーラー(MSI)の目標の1つは、このようなコードからインストールを切り離すことでした。

10
Matthew Wetmore