トップページ⇒software
682コメント299KB

レジストリ vs プライベートINI

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。01/11/22 18:00ID:kWO77Bur
フリーソフトで設定を保存するにはどちらが良いか。
プログラマの視点から、逆にユーザの視点から、
それぞれの利点や欠点について意見を聞かせてください。
0276名無しさん@お腹いっぱい。02/01/29 21:41ID:???
>>274
>INIって元々どういう事が記憶
今のレジストリと同じ。
元々OSの初期化のために作られて、ついでにアプリケーションの設定にも使われた。
初期化のためにあるから書き込みよりも読み出し用って感じ。
読み取り用のAPIには数値を取得するものがあるけど書き込み用には数値用のが無くて、
数値を書き込む場合は一度文字列に変換してから文字列として書き込まないといけなかったりする。

当然、今現在はただのレガシーAPIで、
開発者用のMS配布のドキュメントには
>Note This function is provided only for compatibility with 16-bit Windows-based applications.
>Applications should store initialization information in the registry.
と、ちゃんと書かれてある。
0277なんか今日は激重だね02/01/29 22:01ID:???
>>275
>HKEY_CURRENT_USER\Software
今現在の使われ方をするためのものとして存在してるけど、"ついで"として使われてるだけ。

ちなみに俺はiniファイル派だったりする。
自分で作るアプリは全てiniに設定を保存してる。
たぶん世の中がXMLで設定を保存するようになってもiniファイル使ってると思う。
0278名無しさん@お腹いっぱい。02/01/29 22:49ID:???
> 今現在の使われ方をするためのものとして存在してるけど、"ついで"として使われてるだけ。

あんたの好みという以外の根拠は?
0279age02/01/29 23:42ID:SBBxg6cU
良スレage
0280名無しさん@お腹いっぱい。02/01/29 23:46ID:???
「アプリケーションのデータ」って例えば?
アプリの設定は含まれないよな?
0281名無しさん02/01/30 16:18ID:???
設定とデータの区別ってわからないね。
MozillaなんかはApplication DataにブックマークやCookieを保存するけど
これはデータとも言えるし設定とも言えるし…
0282名無しさん@お腹いっぱい。02/01/30 16:47ID:???
Microsoftはレジストリに保存するかApplication Dataに保存するかは
64KBを目安に決めれと言ってる
0283名無しさん@お腹いっぱい。02/01/30 19:38ID:???
フリーウェアなんかは絶対にレジストリをいじられたくなかったり
でもさんざんいじられてるのでそのうち新規ウィンドウズインストールできれいに消すことになる
0284名無しさん@お腹いっぱい。02/01/30 20:02ID:???
>>283
だからさー、そういうときはいじられたくない根拠を書こうや
0285名無しさん@お腹いっぱい。02/01/30 20:16ID:???
>>282
それは64KBを超える場合はレジストリにしろってこと?
ソースを教えて欲しい。

設定とアプリのデータについて個人的には、
「データ」はおおざっぱに言えば操作によって増減するファイルのようなもの、
(例えばブックマークやキャッシュファイルやクッキーなど)
「設定」はそれ以外のアプリに関する設定だと思っていた。
思いっきりローカルルールだけど。
0286名無しさん@お腹いっぱい。02/01/30 21:47ID:r+HtcEpC
上で言われているように,もっとMSは
レジストリを使う人のためにレジストリ礼儀作法を厳しく指示するべき…

たまに大量のデータをレジストリに投げ入れたりする酷いプログラムに出くわす.
高速に何度もレジストリにアクセスするようなプログラムまである.

NT系でも9x系でも,レジストリをダイエットさせる再構築には
再起動が必要不可欠だから,運用形態によっては悲惨だ.
0287_02/01/30 23:22ID:EMJO49PA
>>286
その為のWindowsロゴだったりするんだけどね。
http://www.microsoft.com/japan/windows/logo/

ini使ってると、マルチユーザーでまるで使い物にならなくなるんだよね。
反面、個人で使う場合、iniの方が便利な事も・・・
0288名無しさん@お腹いっぱい。02/01/31 00:02ID:???
>>285
逆逆。64KBを超える場合はApplication Dataにしろって書いてある。
http://www.microsoft.com/japan/winlogo/downloads/AppSpec22j.doc
> ・HKCU (HKEY_CURRENT_USER) レジストリハイブは、小さなデータ
>  (約 64K) の保存やユーザーごとのポリシー設定の保存に適しています。
(中略)
> ・大きなファイルベースのデータは、[Application Data] フォルダに
>  入れなければなりません。たとえば、Internet Explorer の一時
>  インターネット キャッシュはユーザー プロファイルに格納され、
>  レジストリには格納 されていません。
> ・インストール時に、アプリケーションで HKCU と HKLM に合計 128K を
>  超えるデータを保存してはいけません。ただし、HKEY_CLASSES_ROOT
>  は例外です。
0289名無しさん@お腹いっぱい。02/01/31 00:12ID:???
よくレジストリの利点は(iniと違って)64KBの壁が無いことだ、っていうけど
まったく逆を推奨してるんだね…
0290名無しさん@お腹いっぱい。02/01/31 00:16ID:???
>>289
いや、Application Dataっていうのは、iniというわけでなく・・・
ユーザー毎に持ってるフォルダなので、そこに自由な形式のデータを格納しなっせ。
という事だと思われ。
0291名無しさん@お腹いっぱい。02/01/31 00:25ID:???
さーて、MSDNライブラリのWin2000アプリケーション仕様書をちゃんと読むか・・・
0292名無しさん@お腹いっぱい。02/01/31 00:36ID:???
>>290
>>289は別にiniを使うとは言ってないと思うが。
0293名無しさん@お腹いっぱい。02/01/31 01:15ID:???
>>292
早合点。スマソ。
0294名無しさん@お腹いっぱい。02/02/02 00:15ID:???
本題から全然外れるけど、
レジストリのsoftware直下のキー名がソフト同士でかぶったり
したことってないのかな。
0295名無しさん@お腹いっぱい。02/02/02 01:14ID:???
つーか、Windows も UNIX の仲間もうんこちゃん。まっきんも勿論。
超漢字使え。
0296名無しさん@お腹いっぱい。02/02/04 18:11ID:???
>>294
基本的に"software\[作者が付けた任意の名前]\[ソフトウェア名]"になるから
かぶる事は無いんだけどたまに行儀の悪いソフトがsoftware直下に
ソフト名を持ってくるのもあるから注意せないかん。
0297名無しさん@お腹いっぱい。02/02/04 18:20ID:???
でかいソフトやレジストリを必ず弄るソフト(関連付けとか)でインストーラ付きのソフトならともかく
ツールと呼ばれる程度のソフトでインストールされたフォルダ以外に
設定とかデータを残しては欲しくないな。

マルチユーザの場合はマルチインストール。これ最強。
0298名無しさん@お腹いっぱい。02/02/04 19:28ID:???
>>297
>>284
029929702/02/04 19:42ID:???
別にレジストリ弄るのは良いんだよ。
アンインストーラさえついててキッチリ消してくれるならな。
ただ、アンインストーラついてても消さない糞アプリもあるわけで
レジストリに書き込むアプリは何と無く使いたくない。

んで、あちこちにファイル作られるとアンインストール面倒。
それからバックアップもめんどい。

つーかこれ何回も言われてる事だろ。
いちいち書く必要も無いと思うが。
0300名無しさん@お腹いっぱい。02/02/04 21:33ID:???
レジストリ弄ってもいい
その代わりアンインストールするとき完全に消せ

これがホントの気持ち
0301名無しさん@お腹いっぱい。02/02/04 22:43ID:???
ポイントは
”完全に”
だね
消してると見せかけてよく見ると
鼻くそ程度のこってることがあって
あまり精神的に良くないことが在る
0302名無しさん@お腹いっぱい。02/02/05 10:29ID:SaWLjtr3
というか、消すのって実は難しいの?
0303名無しさん@お腹いっぱい。02/02/05 10:41ID:???
おまえら細かいこと気にしすぎ。レジストリなんか
使ってるうちにどんどん肥大してくよ。新しいソフト
入れなくてもさ。
ディスクのイメージでもとっておいて、数ヶ月に1回
リカバリすればいいじゃん。よさそうなソフトあったら
どんどん試しちゃおうぜ、レジストリなんて気にしないで。
0304名無しさん@お腹いっぱい。02/02/05 14:27ID:???
>>303
> ディスクのイメージでもとっておいて、数ヶ月に1回
> リカバリすればいいじゃん。

めんどくさいから嫌だ。

===== 終了 =====
0305名無しさん@お腹いっぱい。02/02/05 14:47ID:zIX9aGD+
レジストリなんて,構造覚えてれば,何処にゴミが溜まったか
すぐに分かるから,いくらでもダイエットできるが.
systemに溜まった用途不明のdllだけはドウシヨウモナイ…
0306名無しさん@お腹いっぱい。02/02/05 16:19ID:???
>>305
そのダイエットに使う時間は無意味だと思いませんか?
0307名無しさん@お腹いっぱい。02/02/05 17:29ID:???
実際無意味だよ。レジストリのサイズ気にするのなんて。
0308名無しさん@お腹いっぱい。02/02/05 19:30ID:???
独自のDLLはアプリと同じフォルダに置いて欲しいもんだ。
0309名無しさん@お腹いっぱい。02/02/05 19:34ID:???
>>306
好きでやってるんだからほっといてやれよ
0310名無しさん@お腹いっぱい。02/02/05 19:37ID:???
アプリケーションにレジストリの書き出し機能がついてると便利だな
0311名無しさん@お腹いっぱい。02/02/06 07:08ID:???
自分が作っているものに関してはINI保存+DLL同じ個所。
なんと言っても「アンインストールのとき〜」という記述が楽。

 Win32の手引きとも言えるリファレンスにはレジストリを使え、
と書いているがこれはActiveXの考えと同じだと思う。つまり保
存されているところがどこかを認識せずに使えるってところだな。

 たしかに>>307の言うとおり大した問題じゃないが、INIだとバ
ックアップが楽だという利点がある。レジストリだと全部バック
アップするということをするのもいいかもしれないが効率が良く
ないし。>>310のとおりのような機能があるのもいいと思う。
0312妄想02/02/06 09:05ID:???
ふと思ったんだけどさ、設定保存/復帰用のAPIをEXEに仕込んでおくってどうよ?
具体的引数はまだ考えてないけど、とりあえず設定を保存/復帰ファイル名をPCharで。

で、もしこれが標準になれば1つのアプリを走らせるだけで、
INIだろうが独自形式のファイルだろうがレジストリだろうが、
ほぼ全ての使っているアプリの設定の保存/復帰が出来る。

って、寝起きの時の妄想をちょっとまとめただけだから、
あまりキツイツッコミは無しで(汁
0313名無しさん@お腹いっぱい。02/02/06 14:24ID:???
過去ログ見れば同じ流れがあるんだが、INIの場合、マルチユーザに対応するためにどうする?
マルチインストールという答えはやめて欲しい。
バージョンアップのたびに何回もインストールするのはめんどうだし、
インストールするユーザの数が少ないとは限らないから。
0314名無しさん@お腹いっぱい。02/02/06 17:11ID:???
レジストリ使うかini使うか選択できればいいと思われ
作者は大変だが
0315名無しさん@お腹いっぱい。02/02/06 17:49ID:???
>>313
作者からマルチインストロールって答えが返ってきたら、
各ユーザ用のINIを差し替えるて起動するバッチ、
もしくはそう言うツールを作ってみては?
0316名無しさん@お腹いっぱい。02/02/06 18:08ID:???
>>315
ツール作るにしても結局作者がINI差し替え機能をサポートしてないとならないんだよな。
というか差し替え機能があるなら初めからマルチインストールとは答えないと思われ。
031731502/02/06 18:29ID:???
>>316
説明が足りなかったスマソ。
>そう言うツール
というのは、
単に現在のユーザ名を取得、そこから例えば
AppName_CurrentUserName.ini
みたいなファイルを
AppName.ini
という名前に上書きコピー、そしてAppName.exeを起動。
AppName.exeの終了まで待機し、終了したら
AppName.ini→AppName_CurrentUserName.ini
と上書きコピーする。
こんな感じ。

つまり、対象アプリに切り替えを指示するのではなくて、
こちらが切り替えてしまうアプリ。
つうか説明下手でスマソ、うまく伝わるか不安だ…
0318名無しさん@お腹いっぱい。02/02/06 20:40ID:???
俺はマルチインストールでいいと思うけどな。
全てのユーザにインストールし直すのが面倒なのは
各ユーザにインストール任せれば良いんだし。
そもそもユーザごとに使いたいアプリは違うだろうし
管理者の好みを押し付けるってのはなぁ。

管理が行き届きにくくなるって欠点はあるけど。
0319名無しさん@お腹いっぱい。02/02/06 21:40ID:???
各ユーザにインストールを任せるってのはなぁ…
ド素人がいないとも限らないし。
実際、XPを家族で使ってるとして、インストールや各種設定なんて
恐くてやらせたくない。
これが学校とかだったらなおさらどんなユーザがいるかわからないしなぁ。
っていうか学校でユーザごとに好き勝手にインストールできるような環境だったら
管理どころじゃないよね。
0320名無しさん@お腹いっぱい。02/02/06 22:15ID:???
学校で思い出したんだけど(別に学校じゃなくてもいいけど、大規模な
マルチユーザ環境といえば学校が手っ取り早い例なので。)、
普通、PCごとにリカバリしていくわけで、たいていアプリケーション類は
CドライブのProgram Filesフォルダにインストールされる。
で、ユーザの誰がどのPCを使うかはわからない。(例えて言うなら出席番号順に座るとは限らない)
この場合、UsersアカウントはProgram Filesフォルダには書き込み権限が無いとも考えられる。

こういうとき、アプリケーションの設定はどこに保存するか?
手っ取り早いのはレジストリで、どうしてもINIっていうならApplication Dataフォルダとか。
でもこのアプリケーションを自宅で使うならアプリケーションと同じフォルダに
INIを保存してくれた方が楽。(楽な理由は今まで出し尽くされてきた。)

要するに使う環境によってレジストリ、INI、どっちが便利かってのは
変わってくるんだよね。
だから一番いいのはアプリケーション側がどちらもできるような機能をサポートしてること。
でも作者もめんどうだろうし、作者によって仕様が異なるのも使いにくそう。
だからインターフェイスが統一されて利用するのも簡単なライブラリなんかが
あればいいなと思ったけど、俺にはそんなライブラリを作るスキルは無い!ばか!
0321名無しさん@お腹いっぱい。02/02/06 23:10ID:???
>312
COMコントロールとかはそんな感じで標準化されているね。
0322名無しさん@お腹いっぱい。02/02/06 23:12ID:???
INI使われると、XPのファーストユーザースイッチ機能やTerminalクライアント
なんかが使えなくな〜る。
0323名無しさん@お腹いっぱい。02/02/06 23:39ID:???
>>322
インストール後にも変化するようなINIファイルは、
%USERPROFILE%\Application Data\
%USERPROFILE%\Local Settings\Application Data\
あたりにいれておけば問題なし
0324名無しさん@お腹いっぱい。02/02/07 01:33ID:???
>>323
ファーストユーザースイッチと、Terminalクライアントの場合、
同じユーザーが同時にログインして、同時にアクセスすることになるんだけど
大丈夫?
INIが開けませんって落ちるアプリをよく見かけるので・・・。
0325名無しさん@お腹いっぱい。02/02/07 10:29ID:???
>>324
標準のプロファイルAPIを使ってる限り問題ないと思うけど。
独自に読み書きしてる場合でも普通は読み書き終わったら閉じるんじゃないの?
落ちるようなアプリはよほど設計がタコなんだろ。
でも%USERPROFILE%の下にini入れるくらいだったらレジストリ使うが。
iniのメリットの大半はexeと同じディレクトリにあることによるものだよね?
■ このスレッドは過去ログ倉庫に格納されています