ログを書き出す必要がある winforms アプリがあります。アプリは、UAC 警告なしで、管理者以外のアカウントを使用して実行する必要もあります。
デフォルトのセキュリティ設定に違反せずにログをどこに書き込むことができますか? さらに、これは Windows XP、Vista、および 7 で動作する必要があります。
すべてのユーザーが同じログ ファイルのセットに書き込むことができる場合は、追加のポイント。
ログを書き出す必要がある winforms アプリがあります。アプリは、UAC 警告なしで、管理者以外のアカウントを使用して実行する必要もあります。
デフォルトのセキュリティ設定に違反せずにログをどこに書き込むことができますか? さらに、これは Windows XP、Vista、および 7 で動作する必要があります。
すべてのユーザーが同じログ ファイルのセットに書き込むことができる場合は、追加のポイント。
パスをハードコードすることはできません (すべきではありません)。代わりに、現在のユーザー (またはすべてのユーザー) の AppData ディレクトリの場所を返すために使用できる SHGetFolderPath を呼び出して、Windows に保存場所を尋ねます。
C ソリューションを含む MSDN 記事: http://support.microsoft.com/kb/310294
Delphi の便利な例: http://delphi.about.com/od/kbwinshell/a/SHGetFolderPath.htm
パスに対して 1 回限りのクエリを実行し、絶対文字列に変換して、それを設定に保存するのは危険であることに注意してください。Windowsはそれを変更できるからです。彼らはドメインに参加したり、ウィンドウをアップグレードしたりできます。ウィンドウは実際にファイルを移動する可能性があります。次に、「このフォルダーはどこですか」と再度尋ねずに古い場所を指すと、壊れます。そこに行って、それをやった...
SHGetFolderPathを使用すると、ユーザーごとまたはグローバル ログ ファイル ディレクトリを使用するオプションがあります。CSIDL_COMMON_APPDATAを使用する場合: 「この情報はローミングされず、コンピュータを使用しているすべてのユーザーが利用できます。」それはあなたが望むもののように聞こえます。