ページ 11

Windows Server 2008(64bit)環境でGetTempPath()を使ったときのパスについて

Posted: 2012年3月27日(火) 18:45
by 松田
Windows Server 2008(64bit)環境でGetTempPath()を使用したところ、以下のディレクトリパスが返ってきました。
C:\Users\ユーザ名\AppData\Local\Temp\1
期待していたのは、通常の一時ディレクトリのパス(C:\Users\ユーザ名\AppData\Local\Temp)ですが、
この動作は正常なのでしょうか?

アプリはWow64環境で動作をしています。

Re: Windows Server 2008(64bit)環境でGetTempPath()を使ったときのパスについて

Posted: 2012年3月27日(火) 19:02
by softya(ソフト屋)
コードに問題がある気がしますので簡単な再現コードを作ってもらってよいでしょうか?

Re: Windows Server 2008(64bit)環境でGetTempPath()を使ったときのパスについて

Posted: 2012年3月28日(水) 09:36
by 松田
返信ありがとうございます。
コードは簡単で取得後すぐに出力しても”:\Users\ユーザ名\AppData\Local\Temp\1”
になります。謎です・・・・・

TCHAR str[MAX_PATH];
GetTempPath(MAX_PATH, str);
DPRINTF(_T("GetTempPath = %s \n"),str);

Re: Windows Server 2008(64bit)環境でGetTempPath()を使ったときのパスについて

Posted: 2012年3月28日(水) 10:01
by 松田
修正、少し間違えていました。終端に\が入ります。以下のパスがGetTempPath()で取得したパスです。
C:\Users\ADMINI~1\AppData\Local\Temp\1\

環境がおかしいのかと思いましたが、他の2008環境でも同じ結果になりました。

Re: Windows Server 2008(64bit)環境でGetTempPath()を使ったときのパスについて

Posted: 2012年3月28日(水) 10:18
by 沖 滉均
ちょっと詳細な原因などは分からないのですが下記の場所でも似たような話が書かれていますね。
http://shimaji.exblog.jp/13178677/

リモートアクセスしている場合に、Temp\(数字)\の様になるらしい…というくらいしか分からないのですが…

Re: Windows Server 2008(64bit)環境でGetTempPath()を使ったときのパスについて

Posted: 2012年3月28日(水) 10:46
by softya(ソフト屋)
なるほど。
リモートアクセスなら変わるかも知れませんね。
だとしたら、そのまま素直に使うのが良いと思います。

Re: Windows Server 2008(64bit)環境でGetTempPath()を使ったときのパスについて

Posted: 2012年3月28日(水) 13:14
by 松田
ありがとうございますm(_ _)m
リモートでアクセスしてました。
自分でも調べてみたところ、同じ現象が発生するユーザが見つかりました。また2003でも発生しました。
http://social.technet.microsoft.com/For ... 819775194/

取得したパスの文字列を操作して対応することにします。

Re: Windows Server 2008(64bit)環境でGetTempPath()を使ったときのパスについて

Posted: 2012年3月28日(水) 14:24
by softya(ソフト屋)
松田 さんが書きました:ありがとうございますm(_ _)m
リモートでアクセスしてました。
自分でも調べてみたところ、同じ現象が発生するユーザが見つかりました。また2003でも発生しました。
http://social.technet.microsoft.com/For ... 819775194/

取得したパスの文字列を操作して対応することにします。
わざわざシステムが接続リモートユーザー別に用意しているものを書き換えるのは避けるべきです。
TMPですのでその接続しているユーザーが使用して終わりですよね?

【追記】
恒久的に使うものやユーザー別で困るものはTMPに置くべきではありません。

Re: Windows Server 2008(64bit)環境でGetTempPath()を使ったときのパスについて

Posted: 2012年3月28日(水) 15:03
by 松田
いえ、temp配下に一時ファイルを保存するのが目的ではありません。
クリーナのようなアプリを作成しているのでtemp配下の一時ファイルを削除します。

実際にサーバOS環境でこのような機能をユーザが使うかは、?ですがバグの調査を行ってたときに不思議に思ったので質問をしました。

Re: Windows Server 2008(64bit)環境でGetTempPath()を使ったときのパスについて

Posted: 2012年3月28日(水) 15:11
by softya(ソフト屋)
松田 さんが書きました:いえ、temp配下に一時ファイルを保存するのが目的ではありません。
クリーナのようなアプリを作成しているのでtemp配下の一時ファイルを削除します。

実際にサーバOS環境でこのような機能をユーザが使うかは、?ですがバグの調査を行ってたときに不思議に思ったので質問をしました。
なるほど。
サーバー環境でクリーナー動作をした場合どの様な害があるか想像もつかないのですが、なんとか動くようにしておくよりサーバーのリモートアクセス中で有ることを警告してユーザーにどうするかを決めてもらったほうが良いと思います。
あるいは動かないほうが良いかも知れません。

Re: Windows Server 2008(64bit)環境でGetTempPath()を使ったときのパスについて

Posted: 2012年3月28日(水) 19:28
by 松田
ご教授ありがとうございます。
確かに、サーバ環境でのtempファイル配下の削除は、現動作中のプロセスに影響与えそうで怖いですね。
仕様に関わるとこなので、もう一度考えて修正したいとおもいます。

トピックを解決させていただきます。