今パソコンとパソコンをネットワークでつなぎ、それらがちゃんとつながっているかのテストをしています。
そこでOpenSCManagerという関数を使ってサーバに接続できているかどうか、チェックしていて、XP同士やXP、2000などの組み合わせではうまく
チェックしてくれるのですが、Vistaと他のOSという条件にするとちゃんと接続してあるのに接続されていませんとエラーがかえってきてしまいます。
調べてみたところVista側でユーザアカウント制御というもので妨害しているということがわかりました。
これをはずせばいいらしいのですが、セキュリティの問題でできればこれをはずしたくはありません。なのでユーザアカウント制御はずさなくていい方法、またはユーザアカウント制御をそのときだけ解除できる方法などがありましたら、教えてください。よろしくお願いいたします。
開発環境はVisual C++6.0です。
VISTAのUACではなくて、Windowsファイアウォールの設定で
TCPポートが遮蔽されているだけではないでしょうか?
Windowsファイアウォールの導入されているマシンや、
ウィルスチェッカー等のファイアウォールツールが導入
されているマシンでは、稼働させるアプリがネットワー
クに接続するタイプの場合、プログラム自体を許可する
か、使用するTCP/UDPポートの許可設定をする必要があ
ります。
ご確認下さい。
以上。
目的は何なのですか?
単に接続できているかどうか確認するツールを作りたいだけですか?
それなら ping でも使えばよく、作る必要はないと思います。
それとも、何らかの通信を行うアプリを作っていて、その前段階としての確認ですか?
それも不要というか無駄で、実際に通信してみないとわかりません。
オショウさん>
確認してみましたが、
ファイアウォールなど引っかかりそうなものは解除してあります。
aetosさん>
あるアプリケーションの中で通信をする前に通信ができるか確認する機能を作りたいのです。
私が今機能を追加しようとしているアプリだと、通信としようとして失敗してしまうと通信エラーでアプリがフリーズしてしまうので、上に書いた関数で通信が行われる前にチェックしようとしたんです。
うまく説明できていませんが、よろしくお願いします。
本当にユーザアカウント制御が原因であれば、
Vistaでは「管理者として実行」して貰うか
マニフェストを付けて管理者権限を要求すれば良いかと。
昇格なしでという事であれば恐らく無理でしょう。
ですが通信出来るかの確認のためにOpenSCManagerを使うのですか?
それだけであればWinsockなりで接続を試せば管理者権限すら不要です。
ただし接続できたからといって、その先で目的のサービスが動いているかどうかは
また別の問題となりますが。
UAC はアカウントの権限を制御するものであって、個々のアプリケーション、サービス、ましてやプロセスを制御するものではありません。
どうして UAC が邪魔していると思ったのでしょう。たとえば、UAC を切ったら*結果的に*接続ができるように*見える*といったことでしょうか。
それと、事前の別セッションたる接続の可否をモニタすることはほとんど意味がありません。
たとえば、物理的な原因をもとにした接続不能性 (ケーブル、NIC 等の問題) に対しては意味があるかもしれませんが。
> 通信としようとして失敗してしまうと通信エラーでアプリがフリーズしてしまう
その問題を修正することはできないのでしょうか?
極論、事前確認では OK だったが、その後、いざ通信しようと思ったら LAN ケーブルが抜けていた、という可能性をゼロにすることはできません。
I/Oが絡むことは、実際にやってみないとわからないのが原則です。
オショウさん、にくきゅうさん、もんすくさん、aetosさん>
ありがとうございます。やり方が見えてきたような気がするので、皆さんのアドバイスを下にやってみようと思います。
わかりにくい質問に対して答えてくださり本当にありがとうございました。
ツイート | ![]() |