dポイントプレゼントキャンペーン実施中!

c++で作ったツールにてファイルコピーを行おうとしています。
explorerからexeを直接実行すると成功しますが、phpからexeを起動するとコピーに失敗する問題が出ています。
GetLastErrorにてエラー理由を調べてみると、下記エラーでした。
0x00000005:アクセスが拒否されました。

権限絡みの問題かと考えているのですが知識不足で、コピー元ファイルへのアクセス権の問題なのか、コピー先フォルダへのアクセス権の問題なのか、どちらもあり得るのか、等々分かりません。

何かご存じの方は教えていただけないでしょうか。
宜しくお願い致します。

A 回答 (3件)

0x00000005はアクセス拒否ですね。

#1さんは0xC0000005と勘違いされているのでは?0xC0000005ならメモリアクセス違反です。

で、PHP経由で実行するときにexeの実行アカウントが何になっているかチェックされてはどうでしょう?
エクスプローラでダブルクリック実行しているときは、特に設定しなければログインアカウントで実行されていますが、PHP経由で実行したときに、現在のアカウントで実行されているとは限らないからです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
アカウント名を取得してみたところ、エクスプローラから実行時はwindowsログオン時に入力した通りのアカウント名でしたが、php実行時は"SYSTEM"なるアカウント名でした。

test programを作って確認したところ、コピー先のパスが"c:~"のような場合は正常終了し、IPアドレス等で指定するとそれが自端末であろうと失敗するようです。

してみると、「現在のアカウントの権限ではネットワーク上のマシンへのファイルコピーが許されない」というのが問題のミソかと思うのですが...
自端末はもちろん他端末にもコピーできるようにしなくてはいけないので...
セキュリティ的にNGな設定にでもしないことには実現できない気がしてきました。
NGな設定にすれば実現可能かすらも分かりませんけど。

ともあれ一歩前進したように思います。
ありがとうございます。

お礼日時:2010/03/09 19:26

あちゃ~ごめんなさい。



今まで、アクセス違反しか出たことがないので
おもいっきり見間違えていました。

確かによく見れば先頭が。。。orz
失礼しました。
    • good
    • 0

いってることの意味がまるでわかりませんが、


一般的にアクセス違反は NULLポインタアクセスなど
メモリ確保されていないポインタへのアクセス時に発生することが多かったと思います。

デバッガ等を使って
そのツール内でアクセスしているファイル名などの
ポインタ周りを見直すと直るかもしれませんね。

エクスプローラーで発生しないのはただの偶然だと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
コーディング上のケアレスミスについては既にチェック済みのつもりですが、再三確認してみます。
コンパイルし直しても現象に変化が無く、アプリケーションエラーのような致命的動作とならないことから不正メモリアクセスによるものではないのではないかと考えています。

お礼日時:2010/03/09 08:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!