VC++6.0 Enterprise Edition で MFCのアプリケーションを作成しようと考えていま
す。
自作のアプリケーションにインストーラーを付けたいのですが、
どのようにしたら良いのでしょうか?
過去ログで Install shield またはインターネット上に配布してある物
を使えば良いとあったのですが、
Install shield はとても高価で手が出そうにありませんでした。
インターネット上に配布してあるものは色々あるとのことですが、
お勧めや、アドバイスなど頂けませんでしょうか。
アプリケーションでやりたい内容。
・設定値をiniファイルに保存し、アプリケーションが閉じた場合も、開きなおした時
に、前の設定値が適用される。
(この時に、iniファイルの保存先を統一するためにインストーラーを作りたいと考えて
います。)
・言語は日本語のみです。
なんかモロに Vista で動きそうに無い仕様なんだが... 考え直す気は無いかな。
どんなマシンをサポートする必要があるか、それでインストーラは決めるべき。
vista 64bit 最新環境から Win95 最古環境までいろいろあるから。
当該ソフトを、サポートありで有料で売るのか、無保証フリーソフトにするのか、
その辺でもいろいろ違ってくるし...
ということで、詳細要望によってまったく違ってくるので「お勧め」は不可能。
俺が使ってるのは Inno Setup がメイン。
Enterprise Edition なら当時の InstallShield がついてるはずだが?
VC++6.0ProでさえInstallShieldが付いていたのですけどね…。
標準ではインストールされないので、付属CDを漁ってみれば見つかるかと思いま
す。
が、このケースではInstallShieldを入れて解決するのでしょうか?
結局設定ファイルの保存先を統一するのなら、自分でMFCの該当する設定部
分を書き換える必要が有るような気がするのですが…
それならば自分でiniファイルの保存先を統一する機能を実装するほうがいいと
思います。
そのための設定項目をインストーラで設定したいというのであれば判りますが、そ
の場合、保存先設定が無い場合にはソフトウェア側でその設定をさせたほうが
小回りが効くと思います。
アーカイブのみで配布する事も可能になりますし。
>・設定値をiniファイルに保存し、アプリケーションが閉じた場合も、開きなおした時
>に、前の設定値が適用される。
インストーラ云々は関係なく、
アプリケーションが設定を保存するときに、一定の位置に保存すればいいだけでは?
普通、iniファイルの場所なんてエンドユーザが気にするものではないので
ふと…
インストーラで、iniファイルの保存先を指定できるとすると
その保存先の情報はどこに保存するのか?
tetrapodさん、ぬさん、rinさん
ありがとうございます。
>インストーラで、iniファイルの保存先を指定できるとすると
>その保存先の情報はどこに保存するのか?
Vista、インストーラー云々だけではなく根本から考え直した方が良いようです
ね・・・。
>それならば自分でiniファイルの保存先を統一する機能を実装するほうがいいと
>思います。
>アプリケーションが設定を保存するときに、一定の位置に保存すればいいだけでは?
iniファイルをアプリケーションの中で作成して、設定値を保存する。
アプリケーションを開く時は、設定値が保存されているiniファイルを探し、
無かったら初期値で動作開始する。
と言う考え方でやろうと思います。
ぬさん、rinさんのアドバイスと全く違うことをしているようでしたらご指摘ください。
>と言う考え方でやろうと思います。
ユーザ個別の設定であるならば、むしろその手順の方が普通です。
ただし、「.ini ファイルをどこに置くか」は依然として問題になります。
テキトーなところに置くと、Vista と言わず XP や 2000 でも動作しないシロモノにな
ります。
ユーザ設定を格納するファイルは、SHGetSpecialFolderPath() API などを使用して専用
に設けられたフォルダのパス(CSIDL_APPDATA, CLSIDL_LOCAL_APPDATA など)を取得
し、そこに配置するのが推奨水晶になっています。
> iniファイルをアプリケーションの中で作成して、設定値を保存する。
> アプリケーションを開く時は、設定値が保存されているiniファイルを探し、
> 無かったら初期値で動作開始する。
アプリケーションだけで出来ません?
アプリケーションでiniファイル作って、設定の都度書き換えればいいと思います。
将来、Vistaに移行を考えているなら、レジストリーの利用を薦めます。
ITOさんありがとうございます。
返事が遅くなってしまいました申し訳ございません。
Vistaではiniファイルを扱えないと言う事でしょうか?
OS Vistaが入ったPCが手元になくデバッグ出来ないです・・・。
今回は私の考えていたインストーラーの効果が全く無意味(と言うか使えない)だった
のでアーカイブのみで扱おうと考えています。
既にひどりさんから指摘があるとおり。
「扱えなくは無い。が、下手に使おうとすると UAC でドはまりする」が正解。
ini ファイルで何をしてる/何をしたいのか次第で話は違う。
1.ユーザ別設定を保存する (インストール後にも書き換える設定を保存する)
2.インストール時に決まる「全ユーザ共通設定」を保存し、
インストール後は書き換えない?
後者なら UAC は無関係というか「UAC にきっちり基づきインストーラを作るべし」
前者なら ini ファイルを使うよりレジストリを使うほうが数倍簡単。
普通に CWinApp::GetProfileString 類を使って *.ini ファイルを読み書きしてる
のであれば、そこはいじらず、最初に CWinApp::SetRegistryKey を呼ぶだけで
設定の保存先は HKCU レジストリに移る。
何が何でもレジストリを使いたくないという狂信的理由がある?
Vista マシンが無くても
http://www.microsoft.com/japan/msdn/windowsvista/security/
に書いてある通り「制限つきユーザで問題なく使えるよう」に作れば、
まずほとんどそのまま Vista で動かせる。
そこまできっちりできたら、インストーラを作ろう。
インストーラなしで binary だけ配布し、ユーザに自力でインストールさせる
ってのは Vista では非推奨というか無理ぽ。
ソフトを選ぶとき、いろいろなソフトを試したりしますが、
そういうとき、
「その後使い続けるかわからないソフトがレジストリに何か残す」
のは、なんか苦手
ReadMeなんかに、
「フォルダを消せば全部消えます。レジストリは使ってません」
とかあるとちょっと安心するというか
意識してないだけで無駄なものは他にたくさんあるんだろうが・・・
> レジストリは使ってません
そういうソフトは%ProgramFiles%に置くと%ProgramFiles%を汚すし。
#制限ユーザーで動かない。
#だからAdmin権限で使うひとばかりになった。
#そして迷惑プログラムがやりたいほーだい。
かと言って、%USERPROFILE%やマイドキュメントに、『ユーザー毎に』プログラムファイ
ルを置くのは気持ち悪い。
アプリ自身がレジストリ使わなくても、レジストリに影響を残さずに実行されるのは無
理じゃね?
アプリごとでなくても自分の作ったアプリは同じキーにして、どこにiniファイルを記録
するか、HKCUにパスを記録しておくだけで良くね?
キーがなかったらユーザーに確認ダイアログ出すとかすればより良いかもね。
> 「フォルダを消せば全部消えます。レジストリは使ってません」
> とかあるとちょっと安心するというか
わかるけど、ドメイン環境だとサーバに痕跡が残ったりで、完全にはどうにもならんら
しい。
>わかるけど、ドメイン環境だとサーバに痕跡が残ったりで、完全にはどうにもなら
んらしい。
只のXPでも、実行した実行ファイルのログはレジストリに残ったりするので、痕跡
のほうは以前からどうにもなら無いのでは?
痕跡ならば、ずっと残り続ける訳ではないと思うのですが…
レジストリのSoftwareキーの中が増えて手動操作の際に目的のキーを見つけに
くくなるとかも有りますし。
iniにする利点は、ゴミを残さないこともあるが、設定を簡単に移植、設定を一時
的にバックアップしたり、設定項目のを直接操作等も大きいと思うのですが…。
INIでやるならばEXEと同じパス等固定した位置に本命設定の保存先を書ける
INIを用意してユーザディレクトリや固定ディレクトリを選択できるようにする。
レジストリならば手軽に実行できるアンインストーラと設定のエクスポートを実装
する。
というのが使いやすさの面で考えて良いのでしょうかね。
>というのが使いやすさの面で考えて良いのでしょうかね。
自分の中だけでイロイロ思いを馳せるよりも、デザインガイドラインに1度くらいは目
を通しておく方がいいでしょうね。