Delphi7を使用し、WindowsXPマシーンとWindows7マシーンの2台をLANで接続しています。
実行環境によりDirectoryExistsの挙動が変わります。
・WindowsXPからWindows7の共有フォルダをDirectoryExistsした場合、Delphi7デバッグ環境から実行(F9)しても、実行ファイル(exe)から実行してもディレクトリがあると認識します。
が、
・Windows7からWindowsXPの共有フォルダをDirectoryExistsした場合、Delphi7デバッグ環境から実行(F9)するとディレクトリなし、実行ファイル(exe)から実行するとディレクトリがあると認識します。
なぜ、実行環境により挙動が違うのでしょうか?
ご教授頂きたくお願いします。
追伸:共有フォルダのアクセス許可はフルコントロールに設定しています。
共有フォルダは、ドライブレター割り当てしてるんでしょうか?
であれば、exeを管理者として実行したらデバッグの時と同じくフォルダが無いとなると思います。
これは、確かユーザー毎にドライブの割り当ての情報が管理されるようになったからのようです。何かでそういう記述をみたのですが見つかりませんでした。
UNC(\\PC名\フォルダ)で実行してる場合は関係ないと思いますので無視して下さい。
ご回答有難うございます。
説明不足の様で申し訳ございません。
共有フォルダに対してドライブ名をXとして割り当て「DirectoryExists(X:\Data)」などとしています。
よって、UNC指定ではありません。
色々説明が抜けてました。多分UACが有効になってるんですよね。
Delphi7は管理者として実行するように設定されているんでしょう。
UACが有効になってると、管理者として実行した時と一般ユーザーとして実行した時でドライブレターの割り当てが別になっています。
なので、エクスプローラでみてXドライブがあったとしても管理者として実行したプログラムから見た時にはXドライブは存在しないという事もあり得ます。
私が確認した時はコマンドプロンプトでしたが、エクスプローラを管理者として実行してもXドライブが無い事が確認できるかもしれません。
ご回答有難うございます。
ご指摘の通りWindows7で実行ファイルの特権レベルを「管理者」に設定すると、Xドライブが見えません。環境に関係なくフォルダなしとなりました。
ちなみにDelphi7も管理者設定です。
UACにつきましては、「通知しない」(OFF?)の設定になっております。
ドライブ割り当てを止め、「\\PC名\フォルダ名」を引数にして検証してみます。
つい先日より、Windows7へ移行中でありまして、Windows7の仕様が十分に理解出来ておりませんでした。
ご丁寧なアドバイス有難うございました。
ツイート | ![]() |