みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Telnetクライアントが存在するか確認したい

Windows7でC++にて、PCにTelnetクライアントがインストールされているか確認したいです。
そこで_access_sを使ってみたのですが、どうにも思ったように動いてくれません。

//コード例
void func(void){
cout << _access_s("C:\\Windows\\System32\\telnet.exe",0) <<endl; //←存在しているにもかかわらず、2が返ってきます。
cout << _access_s("D:\\test\\new.txt",0) <<endl; //自分で作成したテキストファイルです。意図した通り0が返ってきます。
}

システムフォルダのアクセス権限の問題なのだろうか・・・とも思ったのですが、解決方法が思いつきませんでした。
解決方法をご存じの方がいらっしゃいましたら、ご教示願います。
よろしくお願いいたします。

投稿日時 - 2013-11-19 16:14:18

QNo.8353699

困ってます

質問者が選んだベストアンサー

#1です。
当方でもtelnet.exeをwindows7にインストールし、テストプログラムを実行してみました。
結果は質問者様と同様でした。(_access_sでは認識しないが、dirコマンドでは表示される)
従って、telnet.exeのみ特殊な仕掛けが施されていると思われます。
しかしながら、プログラムからtelnet.exeを認識する方法はわかりませんでした。
当方で、更に以下の内容を試みましたが、何れもtelnet.exeを認識出来ませんでした。
1.stat関数で、存在を確認。=>認識しない。
2.system関数で"dir c:\\windows\\system32\\telnet.exe"を実行
ファイルが存在しない ・・・・と表示される。
コマンドプロンプトでの直打ちでは、表示されるが、system関数からのdir呼び出しでは表示されず。
3.system関数で"where telnet.exe"を実行
与えられたパターンのファイルが見つかりませんでした。・・・が表示される。
コマンドプロンプトでの直打ちでは、表示されるが、system関数からのwhere呼び出しでは表示されず。
----------------------------------------------------------------
お役に立てず申し訳ありませんでした。引き続き他の回答者からの回答をお待ちください。

投稿日時 - 2013-11-20 10:23:49

補足

再度複数の方法で検証して下さったこちらのご回答をBAとさせていただきます。お二方ともありがとうございました。勉強になりました。

投稿日時 - 2013-11-24 07:42:25

お礼

いえいえとんでもございません。再度実験して下さりありがとうございます。私の環境以外でもこのエラー(?)の再現するようなので、telnet.exeが特殊なのでしょうね。引き続き情報を探してみることにします。ありがとうございました。

投稿日時 - 2013-11-22 02:31:53

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

違うことやってて気付いたのですが
「VirtualStore」
が原因ではないでしょうか

投稿日時 - 2013-11-23 09:59:12

お礼

ご回答ありがとうございます。そういえばそんな機能もありましたね!
ただVirtualStore内にtelnet.exeはなく、access関数と共に検索してみましたが有力な情報は得られませんでした。「ならばレジストリの有無をチェックすれば」とも思いましたが、よく考えればそこまでtelnet機能が必要ないなと思いまして、諦めることにしました。しかしVirtualStoreの問題を思い出せたのはよかったです。今後注意しようと思います。ありがとうございました。

投稿日時 - 2013-11-24 07:41:01

ANo.1

本当にc:\windows\system32内にtelnet.exeが存在しますか。
当方で、実行したところ、存在するexeについては、0が返ります。
以下ソースコードと実行結果です。
----------------------------
cout << _access_s("C:\\Windows\\System32\\telnet.exe",0) <<endl;
cout << _access_s("C:\\Windows\\System32\\ftp.exe",0) <<endl;
-----------------------------
実行結果
2
0
-----------------------------
当方の環境では、
telnet.exeは存在しない
ftp.exeは存在する
状態で実行しています。
------------------------------
C:\Windows\System32>dir ftp.exe
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は 05C2-7500 です

C:\Windows\System32 のディレクトリ

2010/11/20 21:17 42,496 ftp.exe
1 個のファイル 42,496 バイト
0 個のディレクトリ 824,174,346,240 バイトの空き領域

C:\Windows\System32>dir telnet.exe
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は 05C2-7500 です

C:\Windows\System32 のディレクトリ

ファイルが見つかりません
----------------------------------------------

投稿日時 - 2013-11-19 20:29:45

お礼

ご回答ありがとうございます。再度試してみました。

----------------------------
//コード
cout << _access_s("C:\\Windows\\System32\\telnet.exe",0) <<endl;
cout << _access_s("C:\\Windows\\System32\\ftp.exe",0) <<endl;
----------------------------
//実行結果
2
0
----------------------------
//cmd dir
C:\Windows\System32>dir telnet.exe
C:\Windows\System32 のディレクトリ
2009/07/14 10:39 79,872 telnet.exe
1 個のファイル 79,872 バイト
0 個のディレクトリ 77,227,819,008 バイトの空き領域

C:\Windows\System32>dir ftp.exe
C:\Windows\System32 のディレクトリ
2010/11/20 05:24 48,128 ftp.exe
1 個のファイル 48,128 バイト
0 個のディレクトリ 77,227,819,008 バイトの空き領域
----------------------------

こうなりました。telnet.exeもftp.exeも同様に「読み取りと実行」に許可がなされているのですが、ますますわからなくなってしまいました・・・

投稿日時 - 2013-11-20 01:12:08

あなたにオススメの質問