お願いします。
MFCアプリとwixでインストールパッケージを作成しました。
実際にインストールしてMFCアプリを動かしてみて発覚したのですが、
ProgramFolder下にインストールすると、アプリの設定を書き出すiniファイルへのアクセスに失敗します。
原因はVistaのUACだということが分かりました。
そこで、マニフェストファイルを以下をようにすることで対応がとれたのですが
これではアプリを起動するたびにUAC 昇格確認ダイアログが表示されてしまいます。
管理者権限を昇格しつつ、UAC 昇格確認ダイアログが表示されない方法はあるのでしょうか?
<requestedExecutionLevel
level=highestAvailable
uiAccess=false/>
VC++は2003.netです。
よろしくお願いします。
というよりもiniファイルの置き場所を正規の場所にするのが
解決方法としては正しいと思います。
要は、そのユーザーのアクセス件がある場所に置くと言う話ですね。
こう言った情報の置き場所に使えるパスの取得はできると思います。
権限を昇格するのは苦肉の策であって本来の解決方法ではないと思います。
苦肉の策だからダイアログが出ても仕方がないのではないでしょうか。
>管理者権限を昇格しつつ、UAC 昇格確認ダイアログが表示されない方法はあるのでしょ
うか?
ないと思う。UACを無効にするぐらい。
インストーラで
iniファイルのみのACLを変更してインストールできるようにしてみてはどうでしょうか?
もっとも、ProgramFolder配下に設定ファイルを置くべきではないですけど。
さっそくありがとうございます。
>要は、そのユーザーのアクセス件がある場所に置くと言う話ですね。
そのように対応することにします。
Application Data下で問題ないでしょうか?
> Application Data下で問題ないでしょうか?
何を心配しているのかがわかりません。
インストーラで実行されるであろうユーザのAppData配下を
どうにかしたいのか、実行ファイルの実行権限を変えて、
AppDataを固定したいのか。など。
>というよりもiniファイルの置き場所を正規の場所にするのが
>解決方法としては正しいと思います。
「正規の場所」というのが分からないで、iniファイルの置き場所は
AppDataの下で良いのか?
という質問です。
いいと思います。
ユーザごとに設定を変えるのであれば、%APPDATA%(CSIDL_APPDATA) で良いと思います。
全てのユーザで共通の設定をしたいのであれば、%PROGRAMDATA%(CSIDL_COMMON_APPDATA)
に格納するようにプログラムを変えてさらにインストーラでACLを変えるようにします。
(参考)
なぜ %PROGRAMFILES% に書き込んではいけないか?
http://blogs.wankuma.com/tyappi/archive/2007/07/12/84794.aspx
Windows アプリケーションの設定ファイル (ini ファイルや config ファイル) 格納場所
について
http://seclan.dll.jp/cciniloc.htm
[MSDN]CSIDL
http://msdn.microsoft.com/ja-jp/library/bb762494%28en-us,VS.85%29.aspx
aetosさん, Blueさん、アドバイス助かります。
AppData下にiniファイルを置くことで解決しました。
UAC考慮について学ぶ良い機会でした。
ありがとうございました。