質問: 環境変数tempを使用するアプリがアクセスエラー 下記のエラーメッセージが表示されてアプリケーションが動作しないのですが、 windowsって、環境変数tempにアクセスエラーでファイルが書き込めない場合ってあるものなのでしょうか? また、何が原因でこのような状態になるのでしょうか? エラー: temp ディレクトリへのアクセスが拒否されました。xmlserializer を実行している id '{0}' に、temp ディレクトリへのアクセスに必要なアクセス許可がありません。codedom では、プロセスが使用しているユーザー アカウントを使用してコンパイルしようとするため、ユーザーが temp ディレクトリへのアクセス権を持っていない場合、コンパイルはできません。temp ディレクトリの場所を見つけるには、path.gettemppath() api を使用してください。 とのエラーが発生します。 環境 .net framework2.0(c#/winform) windows7 補足 tempの内容 path.gettemppath()で取得すると「c:\users\hogehoge\appdata\local\temp\」 となっており、問題は無さそうです。 テストプログラムのエラー(添付にファイル作成) system.unauthorizedaccessexception: パス 'c:\users\hogehoge\appdata\local\temp\null.txt' へのアクセスが拒否されました。 以上
回答: >パス 'c:\users\hogehoge\appdata\local\temp\null.txt' へのアクセスが拒否されました。 c:\users\hogehoge\appdata\local\temp\null.txtを作成したりオープンしたり出来るのは「ユーザー名hogehogeのユーザーのみ」です。 テストプログラムが「hogehoge」以外のユーザーで実行されている場合は、一切、アクセス出来ません。 xmlserializerも同様で、xmlserializerを実行しているユーザーがhogehogeじゃない(id '{0}'のユーザー)場合は、コンパイルできません。 「環境変数tempにアクセスできない」のではなくて「環境変数tempで示されるフォルダにアクセスできない」のです。 ぶっちゃけ「c:\temp\ってフォルダを作って、そのフォルダを、誰でも読み書き可能にして、環境変数tempの値をc\temp\にしておく」のが、一番楽です。 大昔の古いアプリの中には、環境変数tempで示すフォルダの「パス名の長さ」が「32文字以内」である事を想定しているアプリもあるんで「c:\users\hogehoge\appdata\local\temp\」などと言う長いパス名が設定してあったら、色々と問題が起きます。