Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

レジストリの事教えてくださ �造ぁ��

48 views
Skip to first unread message

池本 登

unread,
Feb 17, 1998, 3:00:00 AM2/17/98
to

池本ともうします。

質問ばかりで申し訳ないのですが、Widnows95/NT4.0での
レジストリのことで教えて下さい。
プログラムのインストールをInstallSheld3で行っているのです
が、DLLやOCXをインストールするときに、以下の内容を言われたのです
が、どのような意味かわからないので、困っています。
もしわかる方がいらっしゃいましたら、どの件でもかまいませんので、教えて
ください。
また、この本を見ればわかるかもしれない等の情報でもかまいませんのでお願
いします。

1.DLLに対して、レジストリの登録をすると言うことを言われたのですが
  何をすればよろしいのでしょうか。

2.OCXに対して、レジストリの登録をすると言うことを言われたのですが
  何をすればよろしいのでしょうか。

3.OCXを登録するとの、REGSRV32.EXEを使えばできるという
  ことなのですが、REGSRV32.EXEがない場合にはどうするので
  しょうか。

4.REGSRV32.EXEで、登録する内容はどのような事をするのでし
  ょうか。

よろしくお願いします。

池本@事業開発室(東京).クボタ
n-ik...@kubota.co.jp

Chikara Kakinuma

unread,
Feb 19, 1998, 3:00:00 AM2/19/98
to

こんにちは、柿沼@DTIです。


池本 登 wrote in message <1998Feb17....@ktka031.tk.kubota.co.jp>...


>池本ともうします。
>
>質問ばかりで申し訳ないのですが、Widnows95/NT4.0での
>レジストリのことで教えて下さい。
>プログラムのインストールをInstallSheld3で行っているのです
>が、DLLやOCXをインストールするときに、以下の内容を言われたのです
>が、どのような意味かわからないので、困っています。
>もしわかる方がいらっしゃいましたら、どの件でもかまいませんので、教えて
>ください。
>また、この本を見ればわかるかもしれない等の情報でもかまいませんのでお願
>いします。
>
>1.DLLに対して、レジストリの登録をすると言うことを言われたのですが
>  何をすればよろしいのでしょうか。

多分、共有ファイルのインストールのことを指していると思います。
Windows95/NT では、複数のアプリケーションで共有しているファイル
(例えばDLL等)は、一体、何本のアプリケーションが利用しているかという
情報をレジストリ上に保存しています。従って、共有が発生する可能性の
あるファイルをインストールする場合、そのレジストリ情報に自分の
アプリケーションも利用する(具体的には、利用する共有するファイル
の値に対して値を加算する)設定をしなければなりません。
逆に、アンインストールするときは、そのレジストリ情報から、利用しない
ということ(具体的には値を1減算する)しなければなりません。
Install Shield 3 の場合、上記、レジストリ操作が簡単に行えるAPIが
あります。

簡単にいいますと、ファイルセットを作成するときに、共有ファイルと
それ以外のものを圧縮ファイルから取り出して、それぞれにインストール
方法を決定するという方法です。

具体的には、
+program -- hogehoge.exe
|
+shared -- vb4jp.dll

というアプリケーションをインストールするとします。配布ファイル(圧縮
ファイル)には、上記、プログラムをディレクトリ毎格納します。
(compress コマンド)

まず、実行プログラム (hogehoge.exe)を取り出します。
これは、共有される可能性はありません。従いまして、

FileSetBeginDefine( szFileSet );

SetStatusWindow( -1, "プログラムファイルをコピー中..." );
TARGETDIR = svTarget;
CompressGet( "data.z", "program\\*.*", INCLUDE_SUBDIR );

続いて、共有ファイル(vb4jp.dll)を取り出します。

SetStatusWindow( -1, "共有ファイルをコピー中..." );
TARGETDIR = WINSYSDIR;
CompressGet( "data.z", "shared\\*.*",
COMP_UPDATE_VERSION | SHAREDFILE );

FileSetEndDefine( szFileSet );

重要なのは、第3引数に指定している値です。

INCLUDE_SUBDIR は、サブディレクトリも含んでインストールされ
ますが、共有ファイル指定をしていない為、アンインストール時に
*無条件*に削除されてしまいます。

COMP_UPDATE_VERSION は、インストールするファイルと、既に
インストールされているファイルのバージョンを比較してインストール
するファイルが新しい場合のみインストールという意味です。

SHAREDFILE は、先に延べたようにインストールするファイルは、
共有ファイルである為、レジストリに共有情報を書込んで
アンインストール時は、レジストリから共有情報を減算しなさいという
意味です。アンインストール時に共有情報が”0”になった場合は
操作者に対して、「XXXXのファイルは利用するアプリケーションが
いないので削除してもよいか?」というダイアログを表示するように
なっています。

最後に実際にインストールするAPIを発行すればOKです。
nResult = FileSetPerformEz( szFileSet, 0 );

となります。

上記のように、共有ファイルに対して、InstallShield は、自動的に
レジストリの更新を行ってくれますので、開発者は、あまり気にせずに
共有ファイルを安全にインストールすることが可能となります。
ちなみに、OCXも同じ事がいえます。

#3.4.については私はよくわかりませんので他の人にフォロー
#願います。

でわ

--
東電ソフトウェア株式会社 システム技術部 DBDC技術GRP
柿沼 力 (Chikara Kakinuma)
E-mail : OFFICE / kaki...@tsi.co.jp
PRIVATE/ kaki...@mars.dti.ne.jp
kaki...@cba.att.ne.jp

Tetsuya Hoshino

unread,
Feb 19, 1998, 3:00:00 AM2/19/98
to

クロスポストした場合は、極力Followup-toを指定した方がよいで
しょう。
Followup-to: fj.os.ms-windows.programmingとしています。

<1998Feb17....@ktka031.tk.kubota.co.jp>において
n-ik...@tk.kubota.co.jpさんはおっしゃいました...
>1.DLLに対して、レジストリの登録をすると言うことを言われ
>  たのですが何をすればよろしいのでしょうか。

Windows APIのLoadLibraryを使ってDLLをロードして、
GetProcAddressを使って"DllRegisterServer"関数のアドレスを取
得した後、その"DllRegisterServer"関数を実行すればよいので
す。

>2.OCXに対して、レジストリの登録をすると言うことを言われ
>  たのですが何をすればよろしいのでしょうか。

1.の回答の「DLLをロードして」を「OCXをロードして」に置き換え
て読んでください。

>3.OCXを登録するとの、REGSRV32.EXEを使えばで
>  きるということなのですが、REGSRV32.EXEがない
>  場合にはどうするのでしょうか。

REGS"RV"32.exeではなく、REGS"VR"32.exeです。もう一度開発環
境、開発言語のインストール・メディアの中を探してみてくださ
い。必ず入っていると思います。
ちなみにREGSVR32.exeは指定されたファイルに対して1.で説明した
ことを実行します。

>4.REGSRV32.EXEで、登録する内容はどのような事を
>  するのでしょうか。

簡単に言えば、「OLEサーバとして動作するための登録」です。

--
日揮情報システム株式会社 星野 哲也
official address : thos...@jsys.co.jp
personal address : hos...@imasy.or.jp

0 new messages